中都

风习袅袅,盈水展千华,飞檐亭角清铃响。犹记当初,你回眸莞尔,一笑倾城百日香。

博客园 首页 新随笔 联系 订阅 管理
主要步骤:
  1. 发现问题
  2. 定位问题
  3. 解决问题
 
性能问题不外乎三个因素:CPU、内存、IO
 

CPU分析

所以,当发现问题的话,首先从CPU分析,用top、vmstat、ps等命令查看CPU使用率,当某个进程让CPU使用率很高的时候会造成程序响应缓慢的问题,而让CPU繁忙的原因有以下几个:
  1. 线程中有无限空循环、无阻塞、正则匹配、或者计算量太大等等;
  2. 发生了频繁的GC;
  3. 多线程的上下文切换;
 
而确定好是那个进程使用率特别高之后,就可以用 jstack pid 打印堆栈信息查看了,但是注意,在Linux中,所有的线程最终还是以轻量级进程的形式存在的,使用 jstack 只能得到进程的堆栈信息,因此我们需要使用 top -p pid -H 来查看详细的信息;
 
还可以使用 jstat -gcutil pid 查看对应的进程GC信息,判断是否是GC造成了CPU繁忙;
 
也可以通过 vmstat 观察内核上下文切换次数,看看是否是上下文切换造成的CPU繁忙;(vmstat 1 5,表示每隔1秒采集一次,每次采集5个样本)
 

内存分析

堆外内存
这块主要也是 vmstat、sar、top、pidstat 命令
 
堆内内存
主要是 jmap、jhat
  • 查看JVM内存使用情况:jmap -heap
  • 查看JVM内存存活对象:jmap -histo:live
 

IO分析(大量随机读写、设备慢、文件太大)

文件IO
可以使用 pidstat iostat vmstat

 

 

bi:设备每秒接收的块数量
bo:设备每秒发送的块数量
 

网络IO

netstat
 

分析工具:

VisualVM jconsole

posted on 2021-03-30 20:19  中都  阅读(144)  评论(0)    收藏  举报
Live2D