记一次cpu占用过高问题的解决办法

说白了,解决Java中CPU占用过高问题的关键就是找到合适的CPU消耗线程,然后对症下药。

我们先来说说最重要的事情。
使用 top -H -p 1 6 3 2 2 命令是关键。
去年我们做这个项目的时候,单独使用top direct来查找流程是没有意义的。
在问题暴露之前,我们必须添加 -H 来消耗线程 CPU。
还有一点是线程PID被转换为十六进制以匹配jstack的输出。
当时直接使用decimal进行随机匹配,需要很长时间查看日志才能找到合适的人。
还有另一个关键细节。
如果Jstack输出太长,可以使用-A3 0只看栈帧,省去大海捞针的麻烦。
在我们的项目中我们在3 0行中找到了原因。

一开始我以为CPU高是代码错误,后来发现是错误的。
在去年的一个项目中,第三方库正在解析大型 JSON 文件,这些文件的速度非常慢,以至于耗尽了整个应用程序的 CPU。
等等,还有别的事。
更换JSON库之前最好测量一下压力测试数据。
不要像上次一样发现更换后内存爆炸了。

最后提醒:优化后不要忘记检查系统监控。
有时并发会随着CPU的下降而增加,所以你需要全面地看待它。

线上Java程序占用 CPU 过高,请说一下排查方法?

这是一个陷阱,不要相信,不要做。

使用top命令查找Java进程。
使用 top -H -p 搜索线程。
使用 jstack 查看堆栈信息。
分析堆栈信息以找出问题。

实用提醒:首先找到线程ID,然后检查jstack的输出。

linux如何查看线程是否被占满

我上周尝试使用上衣。

2 02 3 年3 月1 5 日,我的朋友使用了htop fast。

PS也可以查看,但是操作比较复杂。

vmstat信息完整,但查看线程不方便。

算了。