<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Ops运维 | Mr`kang Blog｜小豆子]]></title> 
<link>https://www.cnmysql.com/index.php</link> 
<description><![CDATA[关注服务器运维技术、DB优化、Docker虚拟化、自动化运维、工作积累]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Ops运维 | Mr`kang Blog｜小豆子]]></copyright>
<item>
<link>https://www.cnmysql.com/post//</link>
<title><![CDATA[linux下查看使用硬盘IO过高的进程]]></title> 
<author>kangyang &lt;kangyang315@qq.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Wed, 06 Aug 2014 07:03:13 +0000</pubDate> 
<guid>https://www.cnmysql.com/post//</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 12px;"><span style="font-family: 宋体;">服务器cpu使用率不高，load比较高，所以要查看一下IO。硬盘IO可以通过命令vmstat或iostat获得（也可以用yum 安装dstat获得），网络IO可以用iftop命令获取。但是不知道那个进程使用硬盘IO比较高，通过查找没有找到相关命令，只好自己写个脚本进行统计处理。<br/>本脚本在CentOS6下（kernel2.6以上）python2.6测试通过。<br/>直接运行脚本，默认情况下收集3秒钟数据，显示读写最高的前三个进程。如用参数可以使用命令“python fhip.py 4 5 3”，第一个数位每次收集读写数据的间隔秒数，第二个数是打印出读写最多的n个进程，第三个为运行脚本的次数。因为参数部分写的比较简单那，所以用参数必须3个全写。<br/><div class="code">#!/bin/python <br/>#-*- coding:utf-8 -*- <br/># Filename:&nbsp;&nbsp;&nbsp;&nbsp;ind_high_io_process<br/># Revision:&nbsp;&nbsp;&nbsp;&nbsp;1.0 <br/># Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2013-3-8 <br/># Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simonzhang <br/># web:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www.simonzhang.net <br/># Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; simon-zzm@163.com <br/>### END INIT INFO<br/>import os<br/>import re<br/>import sys<br/>import time<br/>from string import strip<br/> <br/>####<br/>sys_proc_path = &#039;/proc/&#039;<br/>re_find_process_number = &#039;^&#92;d+$&#039;<br/> <br/>####<br/># 通过/proc/$pid/io获取读写信息<br/>####<br/>def collect_info():<br/>&nbsp;&nbsp;&nbsp;&nbsp;_tmp = &#123;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;re_find_process_dir = re.compile(re_find_process_number)<br/>&nbsp;&nbsp;&nbsp;&nbsp;for i in os.listdir(sys_proc_path):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if re_find_process_dir.search(i):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 获得进程名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process_name = open(&quot;%s%s/stat&quot; % (sys_proc_path, i), &quot;rb&quot;).read().split(&quot; &quot;)&#91;1&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 读取io信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rw_io = open(&quot;%s%s/io&quot; % (sys_proc_path, i), &quot;rb&quot;).readlines()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for _info in rw_io:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cut_info = strip(_info).split(&#039;:&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if strip(cut_info&#91;0&#93;) == &quot;read_bytes&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_io = int(strip(cut_info&#91;1&#93;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if strip(cut_info&#91;0&#93;) == &quot;write_bytes&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_io = int(strip(cut_info&#91;1&#93;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_tmp&#91;i&#93; = &#123;&quot;name&quot;:process_name, &quot;read_bytes&quot;:read_io, &quot;write_bytes&quot;:write_io&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return _tmp<br/> <br/>def main(_sleep_time, _list_num):<br/>&nbsp;&nbsp;&nbsp;&nbsp;_sort_read_dict = &#123;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;_sort_write_dict = &#123;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 获取系统读写数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;process_info_list_frist = collect_info()<br/>&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(_sleep_time)<br/>&nbsp;&nbsp;&nbsp;&nbsp;process_info_list_second = collect_info()<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 将读数据和写数据进行分组，写入两个字典中<br/>&nbsp;&nbsp;&nbsp;&nbsp;for loop in process_info_list_second.keys():<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second_read_v = process_info_list_second&#91;loop&#93;&#91;&quot;read_bytes&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second_write_v = process_info_list_second&#91;loop&#93;&#91;&quot;write_bytes&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frist_read_v = process_info_list_frist&#91;loop&#93;&#91;&quot;read_bytes&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frist_read_v = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frist_write_v = process_info_list_frist&#91;loop&#93;&#91;&quot;write_bytes&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frist_write_v = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 计算第二次获得数据域第一次获得数据的差<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sort_read_dict&#91;loop&#93; = second_read_v - frist_read_v<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sort_write_dict&#91;loop&#93; = second_write_v - frist_write_v<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 将读写数据进行排序<br/>&nbsp;&nbsp;&nbsp;&nbsp;sort_read_dict = sorted(_sort_read_dict.items(),key=lambda _sort_read_dict:_sort_read_dict&#91;1&#93;,reverse=True)<br/>&nbsp;&nbsp;&nbsp;&nbsp;sort_write_dict = sorted(_sort_write_dict.items(),key=lambda _sort_write_dict:_sort_write_dict&#91;1&#93;,reverse=True)<br/>&nbsp;&nbsp;&nbsp;&nbsp;# 打印统计结果<br/>&nbsp;&nbsp;&nbsp;&nbsp;print &quot;pid&nbsp;&nbsp;&nbsp;&nbsp; process&nbsp;&nbsp;&nbsp;&nbsp; read(bytes) pid&nbsp;&nbsp;&nbsp;&nbsp; process&nbsp;&nbsp;&nbsp;&nbsp; write(btyes)&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for _num in range(_list_num):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_pid = sort_read_dict&#91;_num&#93;&#91;0&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_pid = sort_write_dict&#91;_num&#93;&#91;0&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res = &quot;%s&quot; % read_pid<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res += &quot; &quot; * (8 - len(read_pid)) + process_info_list_second&#91;read_pid&#93;&#91;&quot;name&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res += &quot; &quot; * (12 - len(process_info_list_second&#91;read_pid&#93;&#91;&quot;name&quot;&#93;)) + &quot;%s&quot; % sort_read_dict&#91;_num&#93;&#91;1&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res += &quot; &quot; * (12 - len(&quot;%s&quot; % sort_read_dict&#91;_num&#93;&#91;1&#93;)) + write_pid<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res += &quot; &quot; * (8 - len(write_pid)) + process_info_list_second&#91;write_pid&#93;&#91;&quot;name&quot;&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res += &quot; &quot; * (12 - len(&quot;%s&quot; % process_info_list_second&#91;write_pid&#93;&#91;&quot;name&quot;&#93;)) + &quot;%s&quot; % sort_write_dict&#91;_num&#93;&#91;1&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print res<br/>&nbsp;&nbsp;&nbsp;&nbsp;print &quot;&#92;n&quot; * 1<br/> <br/>if __name__ == &#039;__main__&#039;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;try:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sleep_time = sys.argv&#91;1&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;except:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sleep_time = 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;try:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_num = sys.argv&#91;2&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;except:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_num = 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;try:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop = sys.argv&#91;3&#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;except:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;for i in range(int(loop)):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main(int(_sleep_time), int(_num))</div><br/><div class="code">pid&nbsp;&nbsp;&nbsp;&nbsp; process&nbsp;&nbsp;&nbsp;&nbsp; read(bytes) pid&nbsp;&nbsp;&nbsp;&nbsp; process&nbsp;&nbsp;&nbsp;&nbsp; write(btyes)<br/>57192&nbsp;&nbsp; (mysqld)&nbsp;&nbsp;&nbsp;&nbsp;8192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28870&nbsp;&nbsp; (vsftpd)&nbsp;&nbsp;&nbsp;&nbsp;397312<br/>875&nbsp;&nbsp;&nbsp;&nbsp; (udevd)&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 57192&nbsp;&nbsp; (mysqld)&nbsp;&nbsp;&nbsp;&nbsp;229376<br/>16534&nbsp;&nbsp; (php-fpm)&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 817&nbsp;&nbsp;&nbsp;&nbsp; (kjournald) 163840<br/>2960&nbsp;&nbsp;&nbsp;&nbsp;(kondemand/7)0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2883&nbsp;&nbsp;&nbsp;&nbsp;(syslogd)&nbsp;&nbsp; 20480<br/>452&nbsp;&nbsp;&nbsp;&nbsp; (usb-storage)0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 43084&nbsp;&nbsp; (nginx)&nbsp;&nbsp;&nbsp;&nbsp; 12288<br/>16762&nbsp;&nbsp; (php-fpm)&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18833&nbsp;&nbsp; (crond)&nbsp;&nbsp;&nbsp;&nbsp; 4096<br/>2363&nbsp;&nbsp;&nbsp;&nbsp;(iscsi_eh)&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 875&nbsp;&nbsp;&nbsp;&nbsp; (udevd)&nbsp;&nbsp;&nbsp;&nbsp; 0<br/>6811&nbsp;&nbsp;&nbsp;&nbsp;(php-fpm)&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16534&nbsp;&nbsp; (php-fpm)&nbsp;&nbsp; 0</div></span></span>
]]>
</description>
</item><item>
<link>https://www.cnmysql.com/post//#blogcomment</link>
<title><![CDATA[[评论] linux下查看使用硬盘IO过高的进程]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.cnmysql.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>