性能分析--JVM--分析CPU
1 简介
在JVM性能分析内存篇“苍穹性能分析之JVM性能分析内存篇”中,我们主要讲了JVM的内存结构,如何分析Full GC和内存OOM问题等。而除了内存,苍穹应用的性能和CPU的关系也非常紧密,CPU使用率的高低会影响苍穹性能的好坏。因此,本篇文章为大家讲讲Java程序CPU相关的性能分析方法。
一般而言,分析Java程序CPU问题的步骤为:首先,通过监控发现CPU问题,然后借助工具分析哪些线程占用大量CPU资源,再做相应的问题追踪。
2 发现CPU问题
监控Java程序CPU使用率有两种方法。一个是通过云平台查看CPU监控,一个是进入容器以后通过Linx命令查看CPU使用情况。
2.1 苍穹云平台
在苍穹云平台的【服务监控】中查看,如下图所示:
服务监控界面,点击上图中某个具体实例的名称,即可查看单个容器的监控情况,如下图所示:

一般情况下,我们分配给每个容器两个CPU。从【服务监控】界面可以看到有一个容器的CPU使用率超过94.41%(CPU的整体平均使用率),出现红色告警,这表示CPU资源使用出现瓶颈。
2.2 容器平台
通过容器平台链接进入容器,输入命令"top –c"直接查看Java整体CPU使用情况。在容器规格为两个CPU的情况下,如果CPU使用率超过100%就说明CPU承载的压力较大。

然后通过“top –Hp 1”命令查看每个Java线程使用CPU情况。
top –Hp 1
//-H:显示每个Java线程CPU使用情况
//-p:指定进程号,一般容器中1号为Java程序的进程号
命令执行结果如下图所示:
这里注意观察是否有线程的CPU使用超过90%,是一个还是多个线程。此外,如果PID小于100,一般是Java的gc线程在运行。
3 分析CPU问题
当CPU使用率过高时,我们应进一步查验该问题是由什么代码引起的,这里主要介绍两种方法。一个是jdk本身自带的jstack工具,一个是通过arthas工具。
3.1 Jstack工具
使用Java原生的工具Jstack工具,命令如下:
top -H -p 1 -n 5 -b | grep "top -" -A 16 > ss1.log && /jdk/bin/jstack -l 1 >> ss1.log
//-n 5 信息更新次数
//-b 以非交互和非全屏模式运行
该命令的意思为收集5次top命令的CPU使用情况,然后导出java线程堆栈。命令执行效果如下图所示:
从上图可看出PID为7524的线程的CPU使用率比较高。我们通过“printf '%x\n' pid”将线程占用最高的 PID 转换为 16 进制得到 nid为“1d64”,然后在ss1.log文件中搜索“xnid”,找到对应的线程堆栈信息,如下图所示。

3.2 Arthas
使用Arthas找到CPU使用率高的线程堆栈。在Arthas启动后,使用命令“$thread –n 2 –I 5000”就可以监控在5秒内,最耗费CPU的两个线程并打印堆栈。

关于Arthas的详细用法可以参考往期文章“苍穹性能分析系列之Arthas的三板斧”。
CPU使用率过高的另一种情况是Java总的CPU使用率很高,但是没有单个线程CPU使用率过高,具体现象如下图所示。

从上图可看出,总的Java进程使用率达到517%,这说明整个Java程序压力都比较大。但通过查看各线程的CPU使用率,并没有线程的CPU使用率超过70%。

这种情况可能是一些并发线程在工作所导致的,我们可以先统计一下线程总数,然后用Jstack命令"ps -Hh 1 | wc -l"导出线程堆快照,分析每类线程的数量。命令执行效果如下图所示:

然后,再结合Monitor平台注册中心看查线程堆栈和日志查询来综合分析问题,找出CPU使用总体占比较高的业务。
4 重点梳理
分析Java程序的CPU问题时,通常可分为三步进行:
步骤1: 通过监控发现CPU问题。一般而言,CPU的使用率达到容器CPU规格*100%,则表示CPU出现性能瓶颈。
步骤2: 借助工具分析CPU问题。如借助Jstack工具、Arthas工具、Monitor监控分析是哪些线程堆栈占用了大量的CPU资源。
步骤3:作问题跟踪和优化调整。根据前述分析结果,跟踪到有问题的类方法后做相应的优化调整。
性能分析--JVM--分析CPU
本文2024-09-23 01:12:17发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144441.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf