找出java进程占用cpu高的元凶

有时候、会查看到服务器负载比较低、应用启动后、会出现java进程占用CPU极高,这种现象比较常见、以下我们分析一下

1、使用 top  -HP 15057  查看进程中的线程占用资源情况

 2、由此可以看到cpu是pid:15393 线程 吃掉了、所以目标锁定在15393上、

执行 printf "%x\n" 15393 计算出对应线程16进制

 第二步:执行sudo -u www jstack 15057、获取当前进程中各线程的调用栈

 对比之前计算出来的16进制id:3c21 、找到占用cpu资源最高的线程堆栈、如上图所示。

看样子问题是出现在LogUtil的255行。

这里写了一个死循环,并在255行调用了阻塞队列的poll(),很明显,方法调用错了,poll()在队列会空的时候会直接返回null,并不会阻塞等待,所以造成进程一直在这儿死循环。

 

posted @ 2024-12-08 22:50  平凡的人生-野草  阅读(144)  评论(0)    收藏  举报