如何排查服务器上Java项目CPU使用过高呢?
分析
造成cpu过高的都是频繁的计算、线程的创建、销毁、切换。
处理思路
- 首先要定位进程(进程是操作系统的基本单元)
- 从进程中定位到线程(线程是进程资源分配的最小单元)
- 使用Javacore定位线程正在干什么
执行步骤
1.通过linux系统命名 top -c,查找到线程中cpu消耗最高的进程(pid)。
2.使用top -Hp pid,获取进程中消耗最高的线程。
因为查出来的线程id(tid)是10进制的,而在java的线程dump中线程是16进制的,所以我们转换一下printf “%x” tid。
3.使用Javacore命令,jstack pid | grep ‘tid’ -C10 –color(-C10 前后10行, –color高亮)
这样我们就和可以获取到线程究竟在干什么了,是哪行代码导致的问题。