找出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 @   平凡的人生-野草  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示