侧边栏壁纸
博主头像
GG's Blog博主等级

行动起来,活在当下

  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Java服务CPU占用过高排查

mrqinzh
2024-08-07 / 0 评论 / 0 点赞 / 17 阅读 / 1602 字

起因是因为部署服务时,发现这个一个Java进程,CPU占用率直接拉满了

通过 jps 命令可以发现

把 cpu 拉满的应用程序 就是这个 UserServiceApplication ,排查下到底怎么个事。

百度了一堆通过命令行的方式排查,通过top命令找到对应的Java进程,然后 top -Hp {pid} 查看进程中的线程,再 printf ‘%x\n’ pid 的方式将线程拿出来转化为16进制,最后 jstack pid | grep ‘转化后16进制线程id’ 找到有问题的代码段。

但是想到我本地安装了一个Java应用的诊断神器 JProfile,就想着用这个工具看下。

这里打开应用后,原则要监控的Java程序

可以看见 CPU 的平均占用已经很高了。

再看下面的 CPU 视图,他就会直接展示,占用率最高的堆栈信息,就可以回代码中看了。

找到代码就好解决了。这里是我之前根据消息队列原理,写的一个简单实现。忘记阻塞线程了,导致他一个空转。👀

先把这段代码注释掉试试,重启服务 通过 jps 获取进程pid ,再 top -p {pid} 发现恢复正常了。

0

评论区