- CPU 利用率:如果我们观察某段时间系统或应用进程的CPU 利用率一直很高(单个core 超过80%),那么就值得我们警惕了。我们可以多次使用jstack 命令dump 应用线程栈查看热点代码,非Java 应用可以直接使用perf 进行CPU 采采样,离线分析采样数据后得到CPU 执行热点(Java 应用需要符号表进行堆栈信息映射,不能直接使用perf 得到结果)。
- CPU 平均负载:平均负载高于CPU 数量70%,意味着系统存在瓶颈点,造成负载升高的原因有很多,在这里就不展开了。需要注意的是,通过监控系统监测平均负载的变化趋势,更容易定位问题,有时候大文件的加载等,也会导致平均负载瞬时升高。如果1 分钟/5 分钟/15 分钟的三个值相差不大,那说明系统负载很平稳,则不用关注,如果这三个值逐渐降低,说明负载在渐渐升高,需要关注整体性能;
- CPU 上下文切换:上下文切换这个指标,并没有经验值可推荐(几十到几万都有可能),这个指标值取决于系统本身的CPU 性能,以及当前应用工作的情况。但是,如果系统或者应用的上下文切换次数出现数量级的增长,就有很大概率说明存在性能问题,如非自愿上下切换大幅度上升,说明有太多的线程在竞争CPU。
资料来源:《Java开发者面试百宝书》,链接:https://developer.aliyun.com/topic/download?id=7899