常用性能工具:工欲善其事,必先利其器
程序员文章站
2022-04-23 23:49:14
...
背景
随着业务量的飙升,公司的系统由于早期待为了业务高速迭代,从精益思维的角度,快速开发,留下了很多历史包袱(或者性能bad code),导致性能问题频出,这篇文章,主要梳理一些常用的性能工具,后续会更新一些排查性能问题的通用思路。
Linux 下常用的性能工具
一般来将,笔者的业务均是部署在linux服务器,这里不得不考虑,操作系统层面的性能排查。
Linux系统分析的工具集:
Brendan Gregg http://www.brendangregg.com/linuxperf.html
大家详细的可以去网站查看。上面图中提到的是linux各个层面:应用层、系统层、驱动层、网络层,及对应的各种排查命令,这里不再一一介绍,点进去链接,保证你收货颇丰。
Java自带的性能排查工具
- jstack 抓取当前堆栈信息,主要用于查看java中的线程都在做什么,非常适用于排查系统响应慢、CPU偏高,是否存在热锁等一系列的问题。大家可能都只知道jstack,不过建议大家也看下jstack的一些辅助参数,jstack默认只能看到Java栈,而jstack -m则可以看到线程的Java栈和native栈。
通常我们会通过linux 命令 top -H 和 jstack 去定位一些cpu执行较高的问题。另外推荐两个linux的命令
pstack 和 perf pstack可以用来看Java进程的native栈,perf linux性能分析超级利器。 - 内存相关命令:
jmap 获取heap信息,同样他也有不同参数,处理不同的场景 比如jmap -dump 和 jmap -histo:live
#提取进程内存信息,用于分析OOM导致原因
jmap -dump:format=b,file=xxx.hprof <pid>
[导出整个JVM 中内存信息]
#输出堆信息
jmap -heap <PID>
#输出永久代信息
jmap -permstat <PID>
jstat 查看实时gc情况,不过复杂的问题还是建议查看gclog
通常运行命令如下:
jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC情况,
jps 查看java的进行id信息
jhat 查看dump信息,不过目前已经不常用,下文会介绍更先进的工具。
java自带的性能排查工具,在一些明显问题的排查上非常快捷,另一方面也是快捷获取线上系统状态快照,便于用利器进一步分析。
进一步的利器
-
gc日志分析利器:
GCViewer 和 gceasy.io ,或者是在线的,可以直接导入日志,可视化的分析gc情况。
2.堆内存分析工具:
MAT 又叫做 Eclipse Memory Analyzer
3.线程分析工具:
IBM JCA工具 (IBM Thread and Monitor Dump Analyze for Java)
一个容许在java线程中定位线程挂起/死锁/资源竞争和瓶颈的工具。
4.其他性能工具:
JProfiler:集CPU、内存和线程性能分析于一体,可以用于分析性能瓶颈、内存泄漏、CPU负载和解决线程相关的问题,支持本地和远程直接连接JVM,线上建议高峰期不要使用。
VisualVM:同上
下一篇: 大神们 棒棒小弟解决方法