0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

JVM CPU使用率飙高问题的排查分析过程

jf_ro2CN3Fa 来源:CG国斌 作者:CG国斌 2022-10-10 16:31 次阅读

问题现象

排查过程

问题现象

首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图:

95272616-4857-11ed-a3b6-dac502259ad0.png

如上图所示,在 下午3:45 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?

排查过程

Step 1: 使用top命令,查询资源占用情况:

955ec864-4857-11ed-a3b6-dac502259ad0.png

如上图所示,显示了服务器当前的资源占用情况,其中PID为5456的进程占用的资源最多。

在这里,我们也使用top -p PID命令,查询指定PID的资源占用情况:

95bb663c-4857-11ed-a3b6-dac502259ad0.png

Step 2: 使用ps -mp PID -o THREAD,tid,time命令,查询该进程的线程情况:

95e2a47c-4857-11ed-a3b6-dac502259ad0.png

在这里,我们也使用ps -mp PID -o THREAD,tid,time | sort -rn命令,将该进程下的线程按资源使用情况倒序展示:

95fb67aa-4857-11ed-a3b6-dac502259ad0.png

Step 3: 使用printf "%x " PID命令,将PID转为十六进制的TID:

9609fbbc-4857-11ed-a3b6-dac502259ad0.png

在这里,我们之所以需要将PID转为十六进制是因为在堆栈信息中,PID是以十六进制形式存在的。

Step 4: 使用jstack PID | grep TID -A 100命令,查询堆栈信息:

962542f0-4857-11ed-a3b6-dac502259ad0.png

如上图所示,显示该进程下多个线程均处于TIMED_WAITING状态。

虽然线程处于WAITING或者TIMED_WAITING状态都不会消耗 CPU,但是线程频繁的挂起和唤醒却会消耗 CPU,而且代价高昂。

而上面之所以会出现 CPU 使用率飙高的情况,则是因为有人在做压测。

特别地,在 mock 底层接口的时候,使用了类似TimeUnit.SECONDS.sleep(1)这样的语句。

至于为何在 下午3:45 分之后,CPU 的使用率降下来了,则是因为停止了压测。

除此之外,我们还可以使用jinfo和jstat命令来查询 Java 进程的启动参数以及 GC 情况:

使用jinfo PID命令,查询启动参数:

9668f54a-4857-11ed-a3b6-dac502259ad0.png

如上图所示,使用该命令我们主要是为了查询启动参数,如初始化堆大小、垃圾回收器等配置。

使用jstat -gcutil PID 1000命令,查询 GC 情况:

967f543e-4857-11ed-a3b6-dac502259ad0.png

如上图所示,显示了PID为20567的 Java 进程每秒的 GC 情况,其中1000表示 GC 状态的更新频率,单位为毫秒。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10816

    浏览量

    210975
  • 服务器
    +关注

    关注

    12

    文章

    8988

    浏览量

    85131
  • JAVA
    +关注

    关注

    19

    文章

    2954

    浏览量

    104510
  • 堆栈
    +关注

    关注

    0

    文章

    182

    浏览量

    19723
  • JVM
    JVM
    +关注

    关注

    0

    文章

    157

    浏览量

    12201

原文标题:记一次 JVM CPU 使用率飙高问题的排查过程

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview如何获取Win7的CPU使用率、MEM使用率和硬盘使用率

    如题,LabVIEW开发程序,需要获取CPU使用率、MEM使用率和硬盘使用率
    发表于 11-13 10:52

    ucosiii任务CPU使用率怎么查看?

    过程:开启统计任务,查看到CPU的整体使用率,但是通过访问任务控制块里面的CPU使用率无法单独查看到每个任务的
    发表于 05-19 23:29

    Outport对CPU使用率的影响是什么?

    对于 simscape 电池 SOC 估算示例,当在带有 MPC5775E 的 PIL 块中使用输出端口进行 SOC 监控时,CPU 使用率约为 0.153%。但是当我终止它并且不监视 SOC
    发表于 04-03 06:44

    CPU使用率问题求解

    对于我们的 CPU 使用率分析任务,MathWorks 团队在 PIL 模式下对 Nucleo-F303RE 72 MHz 板实施了一个 simulink 示例。我在 MPC5775E 板上实现了
    发表于 04-03 09:07

    C#教程之CPU内存使用率

    C#教程之CPU内存使用率,很好的C#资料,快来学习吧。
    发表于 04-20 14:16 7次下载

    cpu使用率忽高忽低问题原因有哪些

    cpu使用率忽高忽低可能是大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据不下。
    的头像 发表于 03-01 05:21 1.9w次阅读

    cpu使用率多少算正常_cpu使用率100怎么办

    本文首先分析cpu使用率多少算正常,其次阐述了cpu使用率100的解决方法,最后介绍了优化cpu
    发表于 04-29 09:28 1.5w次阅读

    cpu使用率过高怎么解决_cpu使用率过高是什么原因

    本文主要阐述了cpu使用率过高的原因及解决方法。
    发表于 04-29 09:34 1603次阅读

    为什么明明没开多少软件,计算的CPU使用率却莫名的

    大家在用电脑的时候经常会遇到一个情况,明明自己也没开多少软件,计算的CPU使用率却莫名的。这是什么原因呢,本文中将对此进行讲解。 (任务管理器截图) 一般情况下,CPU
    的头像 发表于 02-03 17:09 2.7w次阅读
    为什么明明没开多少软件,计算的<b class='flag-5'>CPU</b><b class='flag-5'>使用率</b>却莫名的<b class='flag-5'>高</b>

    CPU使用率达到100%会怎样

    我们使用电脑的时候,点击太多程序会导致CPU使用率达到100%。
    的头像 发表于 02-02 10:59 5.2w次阅读

    CPU使用率是什么意思

    打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服。每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。
    的头像 发表于 05-12 10:37 9002次阅读

    使用Bolt监控CPU使用率

    电子发烧友网站提供《使用Bolt监控CPU使用率.zip》资料免费下载
    发表于 12-14 11:23 0次下载
    使用Bolt监控<b class='flag-5'>CPU</b><b class='flag-5'>使用率</b>

    什么是CPU使用率?如何测量CPU使用率

    CPU 使用率CPU 在计算机上执行各种任务和进程所花费的时间量的度量。
    的头像 发表于 08-06 17:07 5643次阅读

    Java程序CPU使用率的原因

    Java程序是一种高级编程语言,由于其跨平台的特性和强大的功能,被广泛应用于服务器端、企业级应用和大数据处理等场景。然而,在某些情况下,我们可能会发现Java程序的CPU使用率异常,这会导致系统
    的头像 发表于 12-05 11:20 5165次阅读

    如何在Linux系统中检查CPU使用率

    首先在Linux系统中检查CPU使用率。可以通过在命令行中输入top或htop命令来查看当前系统中各个进程的CPU使用率。如果CPU
    发表于 01-06 10:42 1259次阅读
    如何在Linux系统中检查<b class='flag-5'>CPU</b><b class='flag-5'>使用率</b>