关于Linux系统指令 top 之 %si 占用高,分析实例一
续“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 占用高,分析实例一的更多相关文章
- Linux下java进程CPU占用率高分析方法(一)
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...
- Linux下java进程CPU占用率高分析方法
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...
- (转)Linux下java进程CPU占用率高-分析方法
Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...
- linux系统下top命令参数详解
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...
- Linux系统使用iftop查看带宽占用情况
Linux系统下如果服务器带宽跑满了,查看跟哪个ip通信占用带宽比较多,可以通过iftop命令进行查询,使用方法如下: 1 安装方法[软件官网地址:http://www.ex-parrot.com/~ ...
- 查找linux系统下的端口被占用进程的两种方法 【转】
在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用.需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过.但是通过查找man手册,还是同事的交流.总结出来两种 ...
- windows / linux系统中,端口被占用解决方法
一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...
- linux系统 initrd.img中init启动脚本分析
概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...
- Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)
有在Linux系统中安装软件的经历的人都知道,在Linux系统中手动安装软件不想在Windows下安装软件那么方便,直接双击,然后下一步下一步就可以把软件成功的装入到系统中,而在Linux系统中,安装 ...
随机推荐
- ICDAR2015 数据处理及训练
训练数据处理: 天池ICPR2018和MSRA_TD500两个数据集: 1)天池ICPR的数据集为网络图像,都是一些淘宝商家上传到淘宝的一些商品介绍图像,其标签方式参考了ICDAR2015的数据标签格 ...
- Java Date and Calendar examples
Java Date and Calendar examples This tutorial shows you how to work with java.util.Date and java.uti ...
- JavaScript监听手机物理返回键的两种解决方法
JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...
- Keepalived介绍以及在Linux系统下的安装与配置
一.简介 Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层.第4层和第7层交换机的功能.主要提供loadbalancing( ...
- 微信支付错误,页面URL末注册
最近在做个项目用到微信支付的JSSDK支付时候碰到“URL末注册的问题”,可是我已经在公众平台里的支付目录里添加了,测试了几次都是这个问题,最后才发现原来是大小写的问题,还有我的支付页面是ASP.NE ...
- 记一次docker问题定位(perf,iostat等性能分析)
背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...
- 深入浅出HTTPS基本原理
基础知识准备:在了解HTTPS的基本原理之前,需要先了解如下的基本知识. 一.什么是HTTPS,TLS,SSL HTTPS,也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被 ...
- HTML5学习笔记(十五):方法
在一个对象中绑定函数,称为这个对象的方法. 在JavaScript中,对象的定义是这样的: var xiaoming = { name: '小明', birth: 1990 }; 但是,如果我们给xi ...
- CMD命令下访问Oracle数据库
1.非集群下 Windows环境下数据库 127.0.0.1 只是个IP代表 实际要输入你要访问的数据库服务器IP地址的 如果数据库服务器不在本机上,需要加上数据库服务器的地址:用户名/密码@IP地 ...
- select元素添加option的add()方法 | try{}catch{}
1.javascript中的select元素添加option使用add()方法 select的add方法,第一个参数是需要被添加的option元素,第二个参数决定了被添加的位置 普通浏览器中,第二个参 ...