| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
gg_yun
7年前发布

Linux 性能异常定位之进程级别

   <h2>前言</h2>    <p>本文和大家分享:linux系统下各维度的异常,怎样定位到进程级别。说简单点,就是:linux(性能)各维度指标出问题了,我们需要确定哪些进程影响的。</p>    <p>本文主要涉及的linux的常见的性能维度:cpu,内存,io,网络</p>    <h2>涉及工具</h2>    <p>top:综合,偏cpu,内存</p>    <p>dstat:综合、磁盘</p>    <p>iostat:磁盘io,全局</p>    <p>iotop:磁盘io,精确到进程,(类似工具还有pidstat)</p>    <p>iftop:网络、实时刷新(类似工具还有nload,ifstat)</p>    <p>nethogs:进程级别的流量</p>    <p>ss:网络、快、消耗资源低(替代netstat)</p>    <p>pidstat:综合的</p>    <p>free:额,内存。。。</p>    <h2>CPU</h2>    <p>cpu主要关注性能指标:</p>    <p>(1)cpu使用率:用户,系统等</p>    <p>(2)cpu累计使用时长</p>    <p>(3)中断,上下文切换等(使用不多)</p>    <p>就cpu性能指标的观察而言,其实有很多工具,这里主要介绍top和dstat</p>    <h3>1、top</h3>    <p>top各行结果我就不详细介绍了,是用起来也比较简单。对于排查cpu是用率过高,比较关键的指令是P和T。</p>    <p>输入了P(冒号P)之后:按照cpu排序</p>    <p>输入T(冒号T):根据时间、累计时间排序,可查看哪些进程消耗历史消耗多</p>    <p>这样我们就能找到哪个进程占用cpu过高了。</p>    <p>下例:就发现ntpd脚本占用的cpu时间是最多的,当前的ntpd占用cpu使用率也较大(其实只有1.3%)</p>    <p><img src="https://simg.open-open.com/show/8367c0cdae671df47664cad3ff008070.jpg"></p>    <p>另外:还可以输入以下便捷指令</p>    <h3>2、多核</h3>    <p>m:是否显示内存信息</p>    <p>M:根据内存排序</p>    <p>H:shift+h,打开线程模式</p>    <p>x:列的高亮(先要按b)</p>    <p>shift+<或者shift+>改变排序的行</p>    <h3>3、dstat命令</h3>    <p>dstat也是一个比较综合的工具</p>    <p>这里用来找到cpu暂用率最高的参数如下</p>    <p>dstat -lcm --top-cpu</p>    <p>下图可以看到,ntpd(时间服务)和zabbix的agent消耗cpu多点(其实也不多,才0.x%)</p>    <p><img src="https://simg.open-open.com/show/a5f08ef501b15b1d648473ffe4e146a5.jpg"></p>    <h3>4、pidstat</h3>    <p>直接输入pidstat(或者pidstat -l,会把命令的绝对路径输出)就可以看到进程使用cpu相关数据</p>    <p><img src="https://simg.open-open.com/show/4a5282ac19f38d1cfe06508d17780c86.jpg"></p>    <h2>内存</h2>    <p>一般我们对内存关注几个指标:</p>    <p>(1)是否使用了大量的交换空间:如果使用了大量的交换空间,说明有问题了(内存不够?还是说有进程异常?)</p>    <p>(2)每个进程消耗了多少内存空间:</p>    <p>对于内存的查看,最简单就是free,还有dstat和top</p>    <h3>1、free</h3>    <p>通过free -m 我们看到,swap没有使用,内存充足</p>    <p><img src="https://simg.open-open.com/show/7b36ba0d6176ed763356de5bf54e946c.png"></p>    <h3>2、dstat</h3>    <p>查看哪个进程消耗了最多的内存</p>    <p>输入dstat lcmd -top-mem</p>    <p>看到,就puppet消耗了最多的内存59m(正常)</p>    <p><img src="https://simg.open-open.com/show/59edb85630d4de1203cea260da919ebc.jpg"></p>    <h3>3、top</h3>    <p>输入top之后,输入b,再输入x,再输入shift+’>’或者shif+’<‘调整排序的列到mem,就看到到内存消耗的排序了</p>    <p><img src="https://simg.open-open.com/show/017fd52154eacb7769f78d7a112d0ce0.jpg"></p>    <h2>磁盘</h2>    <p>一般我们对磁盘关注几个指标:</p>    <p>(1)读写的量/秒:dstat和iostat(全局),iotop或者pidstat(进程级别)</p>    <p>(2)每次读写磁盘的延迟时间:iostat(全局)</p>    <p>dstat,iostat用于查看全局的io情况,要精确到进程用iotop或者pidstat</p>    <p>dstat:可以看到磁盘每秒的读、写取量(单位还整理过,所以一般我看磁盘的读写量都会用这个工具)</p>    <p>iostat就可以看到:磁盘的磁盘每秒的读、写取量并且还可以看到io的延迟效果(一般我看io的延迟会用这个工具)</p>    <h3>1、dstat</h3>    <p>dstat可以看到每秒读写多少B、K、M的数据</p>    <p><img src="https://simg.open-open.com/show/3c29fc819d39248ef0a810b29e6c6e85.jpg"></p>    <p>dstat其他参数和常用使用还有:</p>    <p>dstat -g -l -m -s --top-mem</p>    <p>dstat -c -y -l --proc-count --top-cpu</p>    <h3>2、iostat</h3>    <p>也可以看到类似的效果,而且更加丰富</p>    <p><img src="https://simg.open-open.com/show/57d64c826ace10a7585f214416a8b947.jpg"></p>    <p>svctm < await (同时等待的请求的等待时间被重复计算),</p>    <p>如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;</p>    <p>如果 await 远大于 svctm,说明 I/O 队列太长</p>    <p>await:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)</p>    <p>svctm:    平均每次设备I/O操作的服务时间 (毫秒):会将await也计算在内</p>    <p>%util:    一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)</p>    <h3>3、iotop</h3>    <p>通过iotop直接看得到io占用最高的进程,直接输入iotop命令,效果如下</p>    <p><img src="https://simg.open-open.com/show/8e99958ad3ea90115a50b094bb7a09be.jpg"></p>    <h3>4、pidstat</h3>    <p>通过pidstat -d也可以看到读写磁盘数据多的进程,pidstat -d效果如下:</p>    <p><img src="https://simg.open-open.com/show/1a042150e87cad46e7b90dd9b3938c4f.jpg"></p>    <h2>网络</h2>    <p>一般网络主要关注性能指标:</p>    <p>(1)出入的流量</p>    <p>(2)连接状态:各个状态如established,timewait等</p>    <p>(3)本地监听,消耗的端口数量等</p>    <p>接下来介绍三个工具</p>    <h3>1、ss</h3>    <p>ss命令用于功能和netstat差不多,用于查看网络连接状态。</p>    <p>ss:消耗资源低;和netstat相比,比较快的原因在于:“ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢”(zz)</p>    <p>以下的实例说明当前已经建立了连接33个,timewaite有866个(可以考虑优化了)</p>    <p><img src="https://simg.open-open.com/show/516b93974f2227392921b77ea4bce7a4.png"></p>    <p>以下的示例说明本地打开了哪些端口</p>    <p><img src="https://simg.open-open.com/show/036787637a844b9afbb98056d31a7aae.jpg"></p>    <h3>2、iftop</h3>    <p>通过iftop可以看到本机和哪些ip域名之间的流量很大:</p>    <p>直接输入iftop既可以看到:</p>    <p><img src="https://simg.open-open.com/show/47b030fc187c7ca64575240c5ce3c0e4.jpg"></p>    <p>iftop命令相关参数介绍如下:</p>    <p>- i 设定监测的网卡,如: # iftop - i eth1</p>    <p>-B 以 bytes 为单位显示流量 ( 默认是 bits) ,如: # iftop -B</p>    <p>-n 使 host 信息默认直接都显示 IP ,如: # iftop -n</p>    <p>-N 使端口信息默认直接都显示端口号,如 : # iftop -N</p>    <p>-F 显示特定网段的进出流量,如 # iftop -F 10.10.1.0/24 或 # iftop -F 10.10.1.0/255.255.255.0</p>    <p>-h ( display this message ),帮助,显示参数信息</p>    <h3>3、nethogs</h3>    <p>nethogs能直接就看到进程级别的流量</p>    <p>直接输入nethogs em2(网卡)就可以看到本地的哪些端口和对端的哪些端口之间的流量,从而就知道哪些进程消耗了很多网络流量了</p>    <p><img src="https://simg.open-open.com/show/64fcf217c66319ffb79ee335a1c2937b.jpg"></p>    <h2>小结</h2>    <p>以上工具,从cpu、内存、磁盘,网络维度,能查到各个进程消耗相关性能(资源)的具体情况,对系统性能出异常时,定位至进程级别是十分有帮助了。</p>    <p> </p>    <p>来自:http://mp.weixin.qq.com/s?__biz=MzIwMzEwOTUwMQ==&mid=2247483664&idx=1&sn=5b0591c5876f8923b87871dc56982894&chksm=96d52402a1a2ad141345390ecc79174da8b293e05c57422f55054a03f946310125f0e1a817fb&scene=4</p>    <p> </p>    
 本文由用户 gg_yun 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1477809034727.html
进程 Linux 运维