linux查看io使用情况,linux 查看io读写速度

大家好,linux查看io使用情况相信很多的网友都不是很明白,包括linux 查看io读写速度也是一样,不过没有关系,接下来就来为大家分享关于linux查看io使用情况和linux 查看io读写速度的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

怎么查看linux的哪个进程占用磁盘io较多

您好,很高兴为您解答。

服务器cpu使用率不高,load比较高,所以要查看一下IO。硬盘IO可以通过命令vmstat或iostat获得(也可以用yum安装dstat获得),网络IO可以用iftop命令获取。但是不知道那个进程使用硬盘IO比较高,通过查找没有找到相关命令,只好自己写个脚本进行统计处理。

本脚本在CentOS6下(kernel2.6以上)python2.6测试通过。

直接运行脚本,默认情况下收集3秒钟数据,显示读写最高的前三个进程。如用参数可以使用命令“python fhip.py 4 5 3”,第一个数位每次收集读写数据的间隔秒数,第二个数是打印出读写最多的n个进程,第三个为运行脚本的次数。因为参数部分写的比较简单那,所以用参数必须3个全写。。

#!/bin/python

#-*-coding:utf-8-*-

#Filename:ind_high_io_process

#Revision:1.0

#Date:2013-3-8

#Author:simonzhang

#web:www.simonzhang.net

#Email:simon-zzm@163.com

###ENDINITINFO

importos

importre

importsys

importtime

fromstringimportstrip

####

sys_proc_path='/proc/'

re_find_process_number='^\d+$'

####

#通过/proc/$pid/io获取读写信息

####

defcollect_info():

_tmp={}

re_find_process_dir=re.compile(re_find_process_number)

foriinos.listdir(sys_proc_path):

ifre_find_process_dir.search(i):

#获得进程名

process_name=open("%s%s/stat"%(sys_proc_path,i),"rb").read().split("")[1]

#读取io信息

rw_io=open("%s%s/io"%(sys_proc_path,i),"rb").readlines()

for_infoinrw_io:

cut_info=strip(_info).split(':')

ifstrip(cut_info[0])=="read_bytes":

read_io=int(strip(cut_info[1]))

ifstrip(cut_info[0])=="write_bytes":

write_io=int(strip(cut_info[1]))

_tmp[i]={"name":process_name,"read_bytes":read_io,"write_bytes":write_io}

return_tmp

defmain(_sleep_time,_list_num):

_sort_read_dict={}

_sort_write_dict={}

#获取系统读写数据

process_info_list_frist=collect_info()

time.sleep(_sleep_time)

process_info_list_second=collect_info()

#将读数据和写数据进行分组,写入两个字典中

forloopinprocess_info_list_second.keys():

second_read_v=process_info_list_second[loop]["read_bytes"]

second_write_v=process_info_list_second[loop]["write_bytes"]

try:

frist_read_v=process_info_list_frist[loop]["read_bytes"]

except:

frist_read_v=0

try:

frist_write_v=process_info_list_frist[loop]["write_bytes"]

except:

frist_write_v=0

#计算第二次获得数据域第一次获得数据的差

_sort_read_dict[loop]=second_read_v-frist_read_v

_sort_write_dict[loop]=second_write_v-frist_write_v

#将读写数据进行排序

sort_read_dict=sorted(_sort_read_dict.items(),key=lambda_sort_read_dict:_sort_read_dict[1],reverse=True)

sort_write_dict=sorted(_sort_write_dict.items(),key=lambda_sort_write_dict:_sort_write_dict[1],reverse=True)

#打印统计结果

print"pidprocessread(bytes)pidprocesswrite(btyes)"

for_numinrange(_list_num):

read_pid=sort_read_dict[_num][0]

write_pid=sort_write_dict[_num][0]

res="%s"%read_pid

res+=""*(8-len(read_pid))+process_info_list_second[read_pid]["name"]

res+=""*(12-len(process_info_list_second[read_pid]["name"]))+"%s"%sort_read_dict[_num][1]

res+=""*(12-len("%s"%sort_read_dict[_num][1]))+write_pid

res+=""*(8-len(write_pid))+process_info_list_second[write_pid]["name"]

res+=""*(12-len("%s"%process_info_list_second[write_pid]["name"]))+"%s"%sort_write_dict[_num][1]

printres

print"\n"*1

if__name__=='__main__':

try:

_sleep_time=sys.argv[1]

except:

_sleep_time=3

try:

_num=sys.argv[2]

except:

_num=3

try:

loop=sys.argv[3]

except:

loop=1

foriinrange(int(loop)):

main(int(_sleep_time),int(_num))

如若满意,请点击【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

如何查看linux服务器io读写情况

首先、用top命令查看

top- 16:15:05 up 6 days, 6:25, 2 users, load average: 1.45, 1.77, 2.14

Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.2% us, 0.2% sy, 0.0% ni, 86.9% id, 12.6% wa, 0.0% hi, 0.0% si

Mem: 4037872k total, 4003648k used, 34224k free, 5512k buffers

Swap: 7164948k total, 629192k used, 6535756k free, 3511184k cached

查看12.6% wa

IO等待所占用的CPU时间的百分比,高过30%时IO压力高

其次、用iostat-x 1 10

avg-cpu:%user%nice%sys%iowait%idle

0.00 0.00 0.25 33.46 66.29

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm%util

sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

sdb 0.00 1122 17.00 9.00 192.00 9216.00 96.00 4608.00 123.79 137.23 1033.43 13.17 100.10

sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

查看%util 100.10%idle 66.29

如果%util接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

idle小于70% IO压力就较大了,一般读取速度有较多的wait.

同时可以结合vmstat查看查看b参数(等待资源的进程数)

vmstat-1

如果你想对硬盘做一个IO负荷的压力测试可以用如下命令

time dd if=/dev/zero bs=1M count=2048 of=direct_2G

此命令为在当前目录下新建一个2G的文件

我们在新建文件夹的同时来测试IO的负荷情况

一文了解使用linux查看磁盘io使用情况

五种方法:top、vmstat、iostat、iotop、pt-ioprofile,用于在Linux中查看磁盘IO使用情况。

一、top命令

使用示例:top- 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01

分析:查看wa(等待输入输出的CPU时间百分比),当wa值超过30%时,表示IO压力较高。

详细解释:

Tasks:进程总数

Cpu(s): CPU使用情况,包括us、sy、ni、id、wa、hi、si、st等。

wa值越高,说明磁盘IO请求越频繁。

二、vmstat命令

命令:vmstat 2 5(每两秒执行一次,执行5次)

详细参数:

Procs: r(等待运行的进程数)、b(非中断睡眠状态的进程数)

Memory: swpd(虚拟内存使用情况)、free(空闲内存)、buff(缓存内存数)

Swap: si(从磁盘交换到内存的交换页数量)、so(从内存交换到磁盘的交换页数量)

IO: bi(发送到块设备的块数)、bo(从块设备接收的块数)

System: in(每秒中断数)、cs(每秒环境切换次数)

CPU: us(CPU使用时间)、sy(系统使用时间)、id(闲置时间)

三、iostat使用

安装命令:yum install sysstat

使用示例:iostat-d-k 2(以KB为单位显示读写信息)

四、iotop命令

安装命令:yum install iotop

查看高IO消耗的线程,并按o只显示有磁盘IO活动的进程。

五、pt-ioprofile命令

安装步骤:安装依赖包、下载rpm包并安装

使用方法:pt-ioprofile--profile-pid=1236--cell=sizes(通过IO吞吐量进行定位)

pt-ioprofile通过附加strace进程进行IO分析,对定位问题更有帮助。通过--cell=sizes参数以B/s方式展示结果,明确IO负载的主要来源及类型。

阅读剩余
THE END