CPU利用率异常分析讨论会-基本概念类问题

(一) CPU的占用是怎么产生的?为什么不同OS下的CPU利用率不同?


操作系统是用来调度任务(进程)和管理外围设备的系统,操作系统采用自己的进程调度策略将进程调度到CPU上运行,占用了CPU时间片,由此产生了CPU的占用。


为什么不同OS下的CPU利用率不同呢?有以下几方面的原因:


1. 不同的操作系统管理外围设备的方法、进程调度的算法、内存管理的算法等等有差异,因此同一个应用在不同的OS下的CPU消耗可能不一样。


2. 同一个应用安装在不同的设备上(包括硬件+OS+系统软件),并不能保证参数都是一样的。即使是同一个版本的OS,由于应用和OS的参数配置太多,可能某个参数配的不一样,相差很大的CPU利用率都是可能的。举几个例子,

    例一:一个采用文件系统,另一个采用裸设备

    例二:一个设置了CPU折叠,一个没设置

    例三:一个写磁盘是按照4K写入,另一个按照64K写入,那么diskbusy的百分比相差很大,CPU的繁忙程度也略有不同


3. 不同OS上,CPU数读工具的统计方法可能不一样,即使是同一个OS,不同的CPU读数工具的统计方法也可能不一样。

 

有人提到,“Linux on Power的处理器利用率比AIX的处理器利用率相比少得多”,这个现象并不奇怪。即使都是AIX,同一个应用在AIX61上和AIX71上,CPU利用率也不同,我做过实验,AIX71相比AIX61做了一定的优化。


(二) 为什么多核CPU的利用率分布不均匀


问题:在AIX系统,利用topas查看时,发现只有一个CPU的利用率很高,其他的core利用率几乎为零,怎么可以调整参数,使得其他的core的利用率增大,在Linux下的问题同样的疑问。


从应用角度,很可能应用是个单进程,不能分到多个CPU上运行。如果已经是个多进程应用,那就可能并发数设置为1了,需调大并发数后才能分配到多个核运行。


从操作系统层面,系统会把进程调度到上一次使用的CPU,以避免进程的上下文切换。一个CPU干的好好的,当然不会调到其他CPU,不然上下文切换代价大。因此,如果压力不是很大的时候,当然是只有一个core的利用率较大,而其他core是闲置状态。


(三) CPU利用率的正常使用范围是多少?


一般来说,生产运行环境中CPU 70%会报警。有些谨慎、保守的单位,CPU超过40%就着手扩容了。


但并不是说CPU一超过70%就一定是异常,对于夜间的批处理业务,可能更多的是期望它尽多占用CPU、尽快处理完成,以免影响第二天的开门。


(四) CPU利用率当中的Sys%高是什么原因?


如果系统态占比比较大,一般有以下几类原因:

1. 为了追求效率,减少用户态到系统态的转换,把用户态的function改到系统态,例如:一些驱动程序,以显卡驱动最为常见

2. 系统有IO问题

3. 应用设计问题

    例1:频繁调用sync函数做缓存到磁盘的数据同步,就会产生大量sys%,并且这个sys%中,大量的是kernel态的wait和sync。

    例2:反复load/unload so文件。

    例3:阻塞方式的网络收发


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值