生产环境中,经常会遇到CPU持续飙高或内存、IO飙高,如何快速定位问题点是很多新手头疼的问题,只能通过经验和代码推理,其实这里针对Java程序可以通过top和jstack命令,快速定位到问题代码。
Top命令的输出
具体定位之前,先补全一下top命令的输出解释,top 命令的输出是动态更新的,通常每3秒刷新一次,但这个刷新频率可以通过交互命令 d
来调整。看一个top命令的输出样例:
top - 16:45:26 up 5 days, 3:12, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 239 total, 1 running, 238 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.6 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16280104 total, 10346652 free, 2689256 used, 3256196 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 7256332 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 user1 20 0 12345672 1048576 524288 S 0.7 6.4 2:34.16 java
1 root 20 0 0 0 0 S 0.0 0.0 0:03.16 init
72 www-data 20 0 344736 8192