性能分析--JVM--分析CPU

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:4

性能分析--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

1 简介在JVM性能分析内存篇“苍穹性能分析之JVM性能分析内存篇”中,我们主要讲了JVM的内存结构,如何分析Full GC和内存OOM问题等。而除...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息