欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-23 23:49:14
...

背景

随着业务量的飙升,公司的系统由于早期待为了业务高速迭代,从精益思维的角度,快速开发,留下了很多历史包袱(或者性能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:同上