yangjianxv
作者yangjianxv·2016-12-26 13:00
部门总经理·成方金融科技有限公司

性能指标之资源指标-CPU-谁占用了CPU-进程级

字数 1492阅读 6170评论 0赞 3

本节介绍如何查看哪些进程占用了较多的CPU,后续从哪里着手深入定位。

AIX当中,通常可以topas实时查看到哪个进程消耗了较多的CPU。类似的,linux当中可以通过top命令查看。

也可以通过topas –P按照CPU利用率排序

PAGE SPACE:The virtual working set size used by process (4 KB pages)

往往性能分析需要采用记录下来的监控数据,而不是实时数据。Nmon的TOP SHEET常常被用来做初步的性能分析,如图:

1、异常进程占用

以下图为例,占用CPU最高的是cicsas,也就是主要干活的进程,这个没的说。而占用CPU排在第2的进程是j2pg,通过以往的经验,这个进程是异常的进程。异常进程如何分析呢?

首先,要分析异常的进程占用CPU的时间段。同样是在Nmon的TOP SHEET中通过“Command”的筛选,查看j2pg在什么时间段占用CPU高。

发现j2pg在每次nmon打点监控的时候都消耗大量CPU。J2pg是个系统进程,看起来像是jfs2文件系统在执行page这样的动作的一个函数,但具体是哪个应用的函数直接或间接调用了这个系统函数,导致了这个结果,参见后续函数级分析的章节。
提前透露一下,这个场景中,由于应用过度频繁的调用了sync函数去做缓存刷磁盘的动作,导致了系统进程j2pg的高企。

2、Zombie进程占用

下面这个例子中,进程<default zombie>是最消耗CPU。

Zombie,顾名思义,就是僵尸进程。一个僵尸进程为什么会占用大量CPU呢?

其实zombie进程有两种可能性,一种是真正的僵尸进程,另一种是当进程销毁的时候,一个短暂的瞬间,进程会处于zombie状态。

根据上面的描述,可以初步分析出,如果zombie占用大量CPU,那么估计不是真正的僵尸进程,而是处于销毁过程中的进程,因为进程的创建、销毁都会消耗大量的CPU资源。

那么为什么这个销毁过程中的zombie会在测试过程中一直占用这么多CPU呢?答案就是,进程不断的被销毁。当然,进程不断被销毁的同时,一定有不断的进程创建,一定是进程反复被创建和销毁。

那么进程为什么会反复被创建和销毁呢?很可能进程处理几笔报文后就自杀了,也就是没有采用进程池。至此,我们只通过一个CPU图形,就可以把应用逻辑的bug找出来,CPU分析的威力是大大的。

3、周期性进程占用

下图中,CPU利用率有明显的毛刺。

这种情况有几种可能:
第一:发送到该服务器的业务量本身有周期性的增大。
第二:某个进程周期性占用
为分析是哪种情况,首先查看哪些进程消耗了CPU。

除了cicsas是真正干活的进程,另外多出来一个PamsTimerSvr进程大量消耗CPU。
查看这个进程消耗CPU的时间点。

可以清晰的看到,该进程每隔一分钟就出来捣一次乱,那么既然是周期性进程,直接找监控系统的开发人员就可以了,咨询监控软件时候时间点发起监控、内部发起了什么操作或命令。如果是测试环境并且对系统比较熟悉,直接kill了这个进程继续测试也是可选之道。

4、核心交易进程占用

本来就应该是这个核心进程占用CPU高,但根据历史经验,这个核心进程以前的占用没有现在多,现在的问题可能是某个bug触发,或者应用版本的更换导致;那么需进入函数级分析(后续章节介绍)。

5、特定类型进程占用

比如JAVA进程占用CPU特别大,需进入函数级分析(后续章节介绍)。
Oracle、DB2等数据库进程占用CPU特别大,需采用Oracle AWR,db2pd等专门工具进行分析。

微信公众号:性能测试与调优

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

X社区推广