CPU彪高排序顺序

简单总结

这类问题分为两大类

  1. 代码问题
  2. JVM自身问题

我们首先要做的就是先保证代码无bug,排查顺序就是 进程 -> 线程 -> jstack 分析,最后在做JVM的分析。

具体操作

对于Java后台程序CPU使用率高的排查,可以按以下步骤操作:

  1. 在Linux上使用top命令,找到CPU使用率持续高的Java进程,记下PID。

  2. 使用top -H -p pid 找到对应进程 pid 下的进程信息

    通过CPU的占用率查询对应PID线程的信息即可。

  3. 将线程PID转换为16进制,这样做的目的是为了在通过jstack命令的时候,不用全部获取,我们可以获取到指定线程对应的日志文件,也就是为了过滤使用。

    shell 复制代码
    printf "0x%x\n" PID
  4. 使用jstack生成线程dump文件。

    shell 复制代码
    jstack 进程_PID | grep 线程PID_16进制 # -A 行数 > jstack.log
  5. 分析jstack日志,找出有问题的线程,查看线程卡住的位置,是否存在死循环、锁竞争等情况。

  6. 如果问题不是代码bug,可以使用jstat -gc PID 1000命令每秒查看垃圾回收次数,检查是否存在GC问题。

  7. 使用jmap -histo:live PID查看堆内存使用情况,检查是否存在内存泄漏。

  8. 使用jconsole连接进程,观察CPU和内存使用曲线的实时变化情况。

  9. 结合jvisualvm等Java可视化分析工具,找到可疑代码位置。

  10. 最后,检查JVM参数设置是否合理,如最大堆内存、新生代大小等,调优JVM参数。

综合运用这些命令和工具,一般可以找出Java程序CPU高的原因,如有必要可以局部优化代码提升效率。

相关推荐
步辞11 小时前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python
weixin_4249993612 小时前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
Polar__Star12 小时前
uni-app怎么实现App端一键换肤 uni-app全局样式动态切换【实战】
jvm·数据库·python
wytraining12 小时前
快速入门 FastAPI 项目
jvm·oracle·fastapi
lhbian13 小时前
AI编程革命:Codex让脚本开发提速10倍
开发语言·汇编·jvm·c#
qq_6543669813 小时前
如何排查Oracle客户端连接慢_DNS解析超时与sqlnet配置优化
jvm·数据库·python
2501_9142459316 小时前
C#怎么使用属性Property C#自动属性和完整属性的区别get set怎么用【基础】
jvm·数据库·python
2401_8371638917 小时前
CSS如何实现网页打印样式优化_利用@media print重写布局
jvm·数据库·python
pele18 小时前
如何解决多线图中线条颜色不渲染(仅标记和提示框显示颜色)的问题
jvm·数据库·python
forEverPlume18 小时前
golang如何排查大量goroutine性能问题_golang大量goroutine性能排查详解
jvm·数据库·python