Java服务CPU飙到99%问题排查
程序员文章站
2022-06-25 13:55:35
最近生产环境中出现了一起CPU突然飙升的事件,下面介绍一下 CPU飙升问题排查的过程和解决方法。 该方案参考自:https://www.jianshu.com/p/e96c74133be6,感谢路遥Neo的分享 一、查看导致CPU飙升的线程 首先需要定位到是服务里的那些线程导致CPU飙升的。具体查找 ......
最近生产环境中出现了一起cpu突然飙升的事件,下面介绍一下 cpu飙升问题排查的过程和解决方法。
该方案参考自:https://www.jianshu.com/p/e96c74133be6,感谢路遥neo的分享
一、查看导致cpu飙升的线程
首先需要定位到是服务里的那些线程导致cpu飙升的。具体查找方法:
1、在服务器上通过命令行输入 top 命令可以查到服务的进程号。
(输入top回车,然后按下大写m按照memory排序,按下大写p按照cpu排序)
如上,占用cpu最多的进程id是:18507
2、查到对应的进程号,通过top -h -p $pid,可以看到具体是哪个线程占用了cpu,记下该线程的id。
这里查询结果列pid 就是线程id 如上占用cpu最多的线程id是: 18599
二、查看对应线程的java堆栈信息
1. 在服务器上 使用 jstack pid > /tmp/log.txt 命令查看线程堆栈信息
如:jstack 18507 > /tmp/log.txt
2. 根据线程id 查询在日志文件中,查看堆栈信息
(由于堆栈日志 线程id是16进制的,所以需要先将10进制的线程id转为16进制)
如 18599 的16 进制是 ox48a7,根据关键词:nid=0x48a7 搜索日志
上一篇: java8新特性之方法引用示例代码