线上是我们最敬畏、也是出问题最难排查的环境,比较常见的一个问题就是线上服务器CPU使用率突然飚增,导致机器频繁预警,常见的CPU使用率飚增原因有以下这些:
- 应用出现频繁GC,且每次GC清理效率较低;
- 在解析文档时,需要进行大量的序列化操作
- 加解密
- 高并发,线程上下文切换、抢锁、状态变化频繁;
- 代码运行出现死循环
这个时候就需要上服务器排查一下了,整理了一下简单的排查步骤:
- 登录服务器,使用top -c命令查看进程使用的CPU情况,定位到CPU使用率最高的进程
- top -Hp 进程id,打印出该进程的线程运行信息列表,找到CPU占有率最高的线程
- 执行 “jstack 进程号 | grep 线程ID” 查找某进程下指定线程ID的线程堆栈信息,如果有显示"VM Thread"就代表这是虚拟机GC回收线程
- 若为GC回收导致,可执行“jstat -gcutil 线程号 统计间隔毫秒"查询GC情况