起因是因为部署服务时,发现这个一个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} 发现恢复正常了。
评论区