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等专门工具进行分析。