JVM的CPU资源占用过高问题的排查.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JVM的CPU资源占用过高问题的排查 2021-07-12 上午线上某应用的一台JVM的CPU占比突然飙高到192%,并且一直下不来,导致监控一直告警,好久没处理这种问题了,现在将问题排查步骤总结记录一下。(以下的图都不是线上问题的截图,涉及到公司业务) ? 1.通过top命令查看当前机器的CPU使用情况 此时发觉假如是Java的进程占用过高,并且一直下不来,则排查是什么线程导致占比过高。以图中进程举例,假如发觉PID为31357的Java进程占CPU比一直很高,则记录下它的PID ? 2.查看Java进程里面的线程的占用情况 top -H -p?31357 说明:-H 指显示线程,-p 是指定进程 可以看到CPU占用较高的线程,登记他们的PID,假设这里31357的CPU占比一直是50% ? 3.通过jstack命令猎取占用资源特别的线程栈,可临时保存到一个文件中查看 jstack 31357? jstack.31357.log 以上能看到指定线程的堆栈信息。 假如想看到关于线程中的锁的附加信息,可以加一个-l参数 4.上面方法用于进程正常情况下的堆栈打印,今日遇到的是用jstack -l命令没有响应,估量是CPU一直站着不能执行正常的命令,依据提示[The -F option can be used when?the target process is not responding]只能放大招了。 jstack -F “PID” jstack.“PID”.txt 吐出的实际日志结果如下: 发觉一大坨线程堵塞了,有用的结果在这里: 明显一直在跑的是19576这个线程,一直在执行EXCEL导出的相关方法,问题就出在这里,下面的任务就是排查这个地方的代码规律了。 jstack命令格式: jstack [ option ] pid ? 参数说明: -F jstack [-l] pid无法响应时,强制打印堆栈 -l l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表. -m 混合模式输出(包括java和本地c/c++片段)堆栈。 pid: java应用程序的进程号 ? 记得没错的话这几个参数是互斥的,不能联合使用。 ? 5.后来搜材料发觉用jps命令查看java进程的pid更有用: ? 命令格式 jps [ options ] [ hostid ] ? 参数说明 -m 输出传递给main方法的参数,假如是内嵌的JVM则输出为null。 -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。 -v 输出传给JVM的参数。 ? 三个参数加在一起显示更具体的信息: 发觉这些Java进程的启动参数中开放了JMX的近程端口,正常情况下可以通过jconsole近程连接过去看到JVM的日常参数。比如本地访问上图中的pay.war进程: ? ?

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档