JVM的CPU资源占用过高问题的排查过程是怎么样的

技术JVM的CPU资源占用过高问题的排查过程是怎么样的今天就跟大家聊聊有关JVM的CPU资源占用过高问题的排查过程是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

今天跟大家聊聊JVM CPU资源过多的故障排除过程,可能很多人都不太了解。为了让你更好地理解,边肖为你总结了以下内容,希望你能从这篇文章中有所收获。

早上一个在线应用中的一个JVM的CPU比例突然飙升到192%,一直没有降下来,导致监控一直报警。我很久没有处理这个问题了。现在我将总结并记录故障排除步骤。(以下图片并非网上问题截图,涉及公司业务。)

1.通过top命令检查当前机器的CPU使用情况。

JVM的CPU资源占用过高问题的排查过程是怎么样的

这时候发现,如果Java的进程占用太多,又不能一直下来,那就要检查是什么线程造成的高比例。以图中流程为例。如果发现PID为31357的Java进程的CPU比率总是很高,记录下它的PID。

2.检查Java进程中的线程占用情况。

顶部-H -p31357

说明:-H表示显示线程,-p表示指定进程。

JVM的CPU资源占用过高问题的排查过程是怎么样的

可以看到CPU占用了大量的线程,记下它们的PID。假设31357的CPU始终是50%。

3.通过jstack命令获取资源占用异常的线程栈,可以临时保存在文件中查看。

jstack 31357 jstack.31357.log

JVM的CPU资源占用过高问题的排查过程是怎么样的

您可以看到上面指定线程的堆栈信息。

如果想查看线程中锁的其他信息,可以添加一个-l参数。

JVM的CPU资源占用过高问题的排查过程是怎么样的

4.上述方法用于工艺正常时的堆栈打印。今天,jstack -l命令没有响应。估计是CPU一直站着,无法执行正常命令。根据提示【目标进程不响应时可以使用-f选项】,只能放大。

jstack-F“PID”jstack。“PID”。文本文件(textfile)

吐槽的实际日志结果如下:

JVM的CPU资源占用过高问题的排查过程是怎么样的

发现很多线程被阻塞,有用的结果在这里:

JVM的CPU资源占用过高问题的排查过程是怎么样的

显然,线程19576一直在运行,一直在执行EXCEL导出的相关方法。这就是问题所在。接下来的任务是检查这个地方的代码逻辑。

Jstack命令格式:

jstack [选项] pid

参数:

-f jstack [-l]在PID无法响应时强制打印堆栈。

-长长的名单。打印关于锁的附加信息,例如属于java.util.concurrent的可拥有的同步器列表.

-m混合模式输出(包括java和本地c/c片段)堆栈。

java应用程序的进程号。

记得没错的话这几个参数是互斥的,不能联合使用。

5.搜索数据后发现,用jps命令检查java进程的pid更实用:

JVM的CPU资源占用过高问题的排查过程是怎么样的

命令格式

jps [选项] [ hostid ]

参数描述

-m输出传递给main方法的参数,如果是嵌入式JVM,输出为null。

-l输出应用主类的完整包名或应用JAR文件的完整路径。

-v输出传递给JVM的参数。

这三个参数一起显示了更详细的信息:

JVM的CPU资源占用过高问题的排查过程是怎么样的

发现JMX的远程端口是在这些Java进程的启动参数中打开的。正常情况下,通过jconsole远程连接可以看到JVM的日常参数。例如,本地访问上图中的pay.war流程:

JVM的CPU资源占用过高问题的排查过程是怎么样的

JVM的CPU资源占用过高问题的排查过程是怎么样的

JVM的CPU资源占用过高问题的排查过程是怎么样的

看完以上,你对JVM的CPU资源占用问题的故障排除过程有进一步的了解吗?如果您想了解更多知识或相关内容,请关注行业资讯频道,感谢您的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44218.html

(0)

相关推荐

  • orz什么意思,最近流行的ORZ是什么意思

    技术orz什么意思,最近流行的ORZ是什么意思“囧”又称“失意体前屈”,最初的使用灵感源自日本的网络象形文字(或心情图示)“orz”,2004年之后逐渐在内地orz什么意思、香港与台湾等地流行,在网络文化中,“囧”的内小

    生活 2021年10月24日
  • 日期英文格式,日期MMYY是什么格式

    技术日期英文格式,日期MMYY是什么格式日期MMYY表示月月年年日期英文格式。M是英文 month 月的缩写,Y是英文 year 年的缩写。
    所以日期MMYY表示月月年年。
    例如: 2019年5月 用日期MMYY表示为:

    生活 2021年10月22日
  • php编译iconv错误的解决方法是什么

    技术php编译iconv错误的解决方法是什么这篇文章主要介绍“php编译iconv错误的解决方法是什么”,在日常操作中,相信很多人在php编译iconv错误的解决方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好

    攻略 2021年11月8日
  • 怎么理解MySQL的innodb_flush_method

    技术怎么理解MySQL的innodb_flush_method这篇文章主要讲解了“怎么理解MySQL的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一

    攻略 2021年11月19日
  • 怎么进行MySQL 5.5 MyISAM表锁测试

    技术怎么进行MySQL 5.5 MyISAM表锁测试这篇文章给大家介绍怎么进行MySQL 5.5 MyISAM表锁测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 对于

    攻略 2021年11月16日
  • MySQL如何在线开启/关闭GTID

    技术MySQL如何在线开启/关闭GTID小编给大家分享一下MySQL如何在线开启/关闭GTID,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一

    攻略 2021年11月6日