续“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在等待软中断处理完成。

一直没有理论来证明以上的说法,暂时通过现象来推论,希望有日可以用理论来证实。

关于Linux系统指令 top 之 %si 占用高,分析实例一的更多相关文章

  1. Linux下java进程CPU占用率高分析方法(一)

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  2. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  3. (转)Linux下java进程CPU占用率高-分析方法

    Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

  4. linux系统下top命令参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  5. Linux系统使用iftop查看带宽占用情况

    Linux系统下如果服务器带宽跑满了,查看跟哪个ip通信占用带宽比较多,可以通过iftop命令进行查询,使用方法如下: 1 安装方法[软件官网地址:http://www.ex-parrot.com/~ ...

  6. 查找linux系统下的端口被占用进程的两种方法 【转】

    在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用.需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过.但是通过查找man手册,还是同事的交流.总结出来两种 ...

  7. windows / linux系统中,端口被占用解决方法

    一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...

  8. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  9. Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)

    有在Linux系统中安装软件的经历的人都知道,在Linux系统中手动安装软件不想在Windows下安装软件那么方便,直接双击,然后下一步下一步就可以把软件成功的装入到系统中,而在Linux系统中,安装 ...

随机推荐

  1. Android开发之AsyncTask的使用

    Android API 3时引进了AsyncTask,也叫异步任务.使用它可以很方便的更新主线程中的UI,使用它比Handler.Thread更简单.由于AsyncTask是抽象类,要使用它首先要创建 ...

  2. mysql数据导入遇到的timestamp类型问题

    今天准备把最新的表导入自己以前的机子上做临时开发,在数据库导入的时候遇到一个问题:Incorrect table definition; there can be only one TIMESTAMP ...

  3. 集群扩容的常规解决:一致性hash算法

    写这篇博客是因为之前面试的一个问题:如果memcached集群需要增加机器或者减少机器,那么其他机器上的数据怎么办? 最后了解到使用一致性hash算法可以解决,下面一起来学习下吧. 声明与致谢: 本文 ...

  4. HBase随机读写

    HDFS不太适合做大量的随机读应用,但HBASE却特别适合随机的读写 个人理解: 1.数据库一般都会有一层缓存,任何对数据的更改实际上是先更改内存中的数据.然后有异步的守护进程负责将脏页按照一定策略刷 ...

  5. 使用maven-shade-plugin插件解决spark依赖冲突问题

    依赖冲突:NoSuchMethodError,ClassNotFoundException   当用户应用于Spark本身依赖同一个库时可能会发生依赖冲突,导致程序奔溃.依赖冲突表现为在运行中出现No ...

  6. React Native超棒的LayoutAnimation(布局动画)

          该文翻译自:https://medium.com/@Jpoliachik/react-native-s-layoutanimation-is-awesome-4a4d317afd3e#.6 ...

  7. sql 优化 -- sql中的自定函数

    Long run sql: MERGE INTO INTITMRTNPARAM D USING ( SELECT A.INRFILENM,A.INRSTAT,A.INRDEPCD,A.INRITMCD ...

  8. Market Guide for AIOps Platforms

    AIOps platforms enhance IT operations through greater insights by combining big data, machine learni ...

  9. Sql Server 2000/2008 用Sql导出数据表结构(包括注释)到Excel

    --Sql Server 2000 declare @id int, ), ) declare cur_1 cursor for select id,name from sysobjects wher ...

  10. iOS开发transform的使用

    // //  ViewController.m //  18-transform的使用 #import "ViewController.h" @interface ViewCont ...