菜鸟笔记
提升您的技术认知

linux系统指令 top 之 %si 占用高,分析实例-ag真人游戏

续“top %wa 高的问题”之后,又遇到top之%si过高(高峰时段超过95%)的问题。

%wa高,说明磁盘忙。譬如磁盘读写次数非常高。

%si高,是否说明软中断忙?是否也说明软中断次数非常高呢?

为了查证此问题,找了一些linux监控中断的工具。起初找到oprofile,它非常强大,强大到使用起来摸不着北。能用oprofile监控硬中断,但在%si很高的时候,监控到硬中断为零。

然后找到procinfo可以监控详细的软中断,可以看来设备及对应的中断数。将两个%si高的项目监控结果如下:


项目a,大压力下场景执行2分钟:

测试前:(未执行测试时,查询前端[服务器c]的数据)

context :11608691780

irq 0: 377348704 timer

irq 14: 41845647 ide0

irq 58:2557376548 0

irq233: 69455022 ioc0

问题环境:(接口配置在[服务器g]时,查询前端[服务器c]的数据)

context :11609397277 差值:705497

irq 0: 377651500 timer 差值:302796

irq 14: 41848329 ide0 差值:2682

irq 58:2557728212 0 差值:351664

irq233: 69457769 ioc0 差值:2747

正常环境:(接口配置在[服务器e]时,查询前端[服务器c]的数据)

context :11611152447 差值:1755170

irq 0: 378089297 timer 差值:437797

irq 14: 41852253 ide0 差值:3924

irq 58:2558490578 0 差值:762366

irq233: 69506181 ioc0 差值:48412


项目b,大压力下场景执行2分钟:

测试前:(未执行测试时,[服务器e]的数据)

context :365586128

irq 0: 555887117 timer

irq 14: 4970216 ide0

irq 98: 6673200 0

irq233: 2963048 ioc0

正常环境:(数据库连接池设置为 localhost )

context :368023507 差值:2437379

irq 0: 556101285 timer 差值:214168

irq 14: 4972124 ide0 差值:1908

irq 98: 7013268 0 差值:340068

irq233: 2968985 ioc0 差值:5937

问题环境:(数据库连接池设置为本机的ip地址)

context :369679349 差值:1655842

irq 0: 556446790 timer 差值:345505

irq 14: 4975148 ide0 差值:3024

irq 98: 7298545 0 差值:285277

irq233: 2974283 ioc0 差值:5298


正常环境,指%si值在正常范围内波动。问题环境指%si异常,一般%si会达到70%~95%。差值是对应设备在测试过程中产生的中断数。

正常环境下的中断数比异常情况下的中断数更高。说明:

计算机在单位有能力处理更多的中断数量,中断数量多并不代表%si高。

进一步说明了:%si高代表cpu等待软中断完成的时间更高。

结合项目b的实际情况,将lamp的mysql连接方式置为永久连接(长连接),%si就不会高了:

  1. 说明php在连接mysql在使用localhost连接时不走网络,进程间切换就不废劲,cpu无需等待;

  2. 而php在使用ip地址进行连接时,进程间切换比较耗费资源,导致cpu等待;

  3. 进程间切换就会产生中断,则cpu等待切换就是cpu在等待软中断处理完成。

网站地图