码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用jstack工具排查JVM中CPU高消耗问题


    1. 确认CPU消耗情况:

      • 使用操作系统的监控工具确认哪个Java进程导致CPU高消耗。
        • Unix/Linux: top 或 htop
        • Windows: 任务管理器
    2. 找到Java进程PID:

      • 通过找到Java进程的PID,为后续的jstack和其他分析提供依据。
        • Unix/Linux: 在top或ps命令中可以看到PID。
        • Windows: 任务管理器中或者使用jps命令。
    3. 分析线程CPU消耗:

      • 找出哪个线程消耗了大量的CPU。
      • Unix/Linux: top -H -p 或 ps -mp -o THREAD,tid,time
      • 将线程ID转换为十六进制(因为jstack输出的线程ID是十六进制的),例如:
        printf "%x\n" <THREAD_ID>
        
    4. 使用jstack获取线程Dump:

      • 使用jstack工具获取线程堆栈信息:
        jstack -l <PID> > threaddump.txt
        
    5. 分析线程Dump:

      • 打开生成的threaddump.txt文件,找出之前高CPU消耗的线程ID对应的堆栈信息。搜索对应的十六进制线程ID(例如:0x2a),通常每个线程会以如下格式开头:
        "Thread-1" #2 prio=5 os_prio=0 tid=0x00007f8e99800000 nid=0x2a runnable [0x00007f8e8b8f7000]
        
    6. 理解线程堆栈信息:

      • 分析该线程的调用栈,特别关注状态为 runnable 的线程。
      • 观察调用栈中的方法,查看是否有业务逻辑、死循环、资源争用等。
    7. 进一步分析和解决问题:

      • 找到具体的代码位置,结合代码逻辑分析问题原因。
      • 结合其他监控工具(如VisualVM、JConsole等)进行更深入的分析,查看线程、内存、GC活动等。
    8. 采取措施:

      • 根据分析结果进行相应的优化,比如修正代码中的死循环、改进算法、调整并发策略等。

    示例

    假设已经找到高CPU消耗Java进程的PID为1234,并且对应的高CPU消耗线程ID为4567:

    1. 获取高CPU线程的十六进制ID:

      printf "%x\n" 4567
      
    2. 使用jstack获取线程Dump:

      jstack -l 1234 > threaddump.txt
      
    3. 在threaddump.txt中搜索0x11d7(假设转换结果为0x11d7)。

  • 相关阅读:
    GraalVM java17 Windows打包
    Vue模块语法下(事件处理器&自定义组件&组件通信)
    2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题
    【Flutter】Flutter学习笔记
    如何删除kafka主题数据
    鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
    我看到的“无条件的爱”,常常是子女给父母的
    如何开发移动应用:iOS和Android的比较
    【零基础学Java】第十七篇 异常
    AttributeError: module ‘scipy.signal‘ has no attribute ‘correlation_lags‘
  • 原文地址:https://blog.csdn.net/cx118118/article/details/139705678
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号