top命令
查看系统负载情况,重点在监控每个进程。当load average三个值加起来 / 3 / 100% > 60%,表示系统负载较高
vmstat
相比top命令,vmstat命令可以监控整个系统cpu和内存使用情况。一般通过两个数字参数来完成,第一个代表采样时间间隔单位为秒,第二个代表采样次数
-
procs:
- r:运行和等待CPU时间片的进程数,原则上1核CPU的运行队列不大于2,整个系统运行队列不超过核心数2倍,否则被视为系统压力过大
- b:等待系统分配资源的进程数(磁盘I/O,网络I/O)
-
cpu:
- us:用户进程消耗cpu时间占比。如果长期高于50%,考虑优化程序
- sy:内核线程消耗cpu时间占比
- us + sy 参考值80%,如果长期高于80%,可能存在cpu性能不足
pidstat
针对进程查看cpu和内存使用情况 -u 打印频率 -p 进程ID
CPU占用过高分析步骤
测试代码
public class Demo {
public static void main(String[] args) {
while (true) {
System.out.println(new java.util.Random().nextInt(77778888));
}
}
}
- 使用top命令查找占用高的进程
- 使用ps -ef | grep pid 或jps -l进一步查看是哪个应用程序占用高
- ps -mp pid -o THREAD,tid,time 定位到具体线程
- 把线程ID转换为16进制(java运行时线程ID以16进制形式存在),通过命令jstack pid | grep tid -A60
-A60 打印前60行