目录
背景
修改jvm参数(新生代与老年代比例)时,看到一台机器java进程的CPU占比时刻保持在300%,觉得不太正常,因此学习排查。
排查过程
在线上六台机器中选择一台机器进行排查,top如下:
![top信息](https://i-blog.csdnimg.cn/blog_migrate/428453664d235199658d580ed27da712.png)
发现进程178的cpu占用率在304.3%,查看其具体占用高的线程 top -Hp pid:
![top -Hp 178](https://i-blog.csdnimg.cn/blog_migrate/57e34794a2488d7d4b231bf6318d3e0a.png)
发现线程pid为806(326),766(2fe),826(33a)的线程占用资源较高,用jstack追踪一下 jstack pid | grep 线程pid16进制,得到如下结果:
![jstack pid | grep 线程pid16进制](https://i-blog.csdnimg.cn/blog_migrate/1f489fe89f3c87cc60bbfbacf902c27b.png)
在代码中找到对应的方法,查看了逻辑,发现有sleep操作,对阻塞队列取数据的方法为poll:<