主要步骤:
- 发现问题
- 定位问题
- 解决问题
性能问题不外乎三个因素:CPU、内存、IO
CPU分析
所以,当发现问题的话,首先从CPU分析,用top、vmstat、ps等命令查看CPU使用率,当某个进程让CPU使用率很高的时候会造成程序响应缓慢的问题,而让CPU繁忙的原因有以下几个:
- 线程中有无限空循环、无阻塞、正则匹配、或者计算量太大等等;
- 发生了频繁的GC;
- 多线程的上下文切换;
而确定好是那个进程使用率特别高之后,就可以用 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
浙公网安备 33010602011771号