有时候、会查看到服务器负载比较低、应用启动后、会出现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,并不会阻塞等待,所以造成进程一直在这儿死循环。
标签:java,占用,元凶,15393,线程,进程,cpu From: https://www.cnblogs.com/yecao8888/p/18593942