常用性能工具:工欲善其事,必先利其器

背景

随着业务量的飙升,公司的系统由于早期待为了业务高速迭代,从精益思维的角度,快速开发,留下了很多历史包袱(或者性能bad code),导致性能问题频出,这篇文章,主要梳理一些常用的性能工具,后续会更新一些排查性能问题的通用思路。

Linux 下常用的性能工具

一般来将,笔者的业务均是部署在linux服务器,这里不得不考虑,操作系统层面的性能排查。
Linux系统分析的工具集:
Brendan Gregg http://www.brendangregg.com/linuxperf.html
在这里插入图片描述
大家详细的可以去网站查看。上面图中提到的是linux各个层面:应用层、系统层、驱动层、网络层,及对应的各种排查命令,这里不再一一介绍,点进去链接,保证你收货颇丰。

Java自带的性能排查工具

  1. jstack 抓取当前堆栈信息,主要用于查看java中的线程都在做什么,非常适用于排查系统响应慢、CPU偏高,是否存在热锁等一系列的问题。大家可能都只知道jstack,不过建议大家也看下jstack的一些辅助参数,jstack默认只能看到Java栈,而jstack -m则可以看到线程的Java栈和native栈。
    通常我们会通过linux 命令 top -H 和 jstack 去定位一些cpu执行较高的问题。另外推荐两个linux的命令
    pstack 和 perf pstack可以用来看Java进程的native栈,perf linux性能分析超级利器。
  2. 内存相关命令:
    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自带的性能排查工具,在一些明显问题的排查上非常快捷,另一方面也是快捷获取线上系统状态快照,便于用利器进一步分析。

进一步的利器

  1. 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:同上

猜你喜欢

转载自blog.csdn.net/baoxue2008/article/details/106965078