linux查看io进程?linux查看磁盘io性能命令
各位老铁们好,相信很多人对linux查看io进程都不是特别的了解,因此呢,今天就来为大家分享下关于linux查看io进程以及linux查看磁盘io性能命令的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
linux 系统查看哪个进程占io
lsof是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
常用的参数列表
lsof filename显示打开指定文件的所有进程
lsof-a表示两个参数都必须满足时才显示结果
lsof-c string显示COMMAND列中包含指定字符的进程所有打开的文件
lsof-u username显示所属user进程打开的文件
lsof-g gid显示归属gid的进程情况
lsof+d/DIR/显示目录下被进程打开的文件
lsof+D/DIR/同上,但是会搜索目录下的所有目录,时间相对较长
lsof-d FD显示指定文件描述符的进程
lsof-n不将IP转换为hostname,缺省是不加上-n参数
lsof-i用以显示符合条件的进程情况
lsof-i[46] [protocol][@hostname|hostaddr][:service|port]
46--> IPv4 or IPv6
protocol--> TCP or UDP
hostname--> Internet host name
hostaddr--> IPv4地址
service-->/etc/service中的 service name(可以不只一个)
port-->端口号(可以不只一个)
linux怎样查看那个进程占用网络io
查看linux进程占用端口步骤如下:
lsof-i用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。以root用户来执行lsof-i命令,如下图
lsof-i:端口号,用于查看某一端口的占用情况,比如查看22号端口使用情况,lsof-i:22,如下图
netstat-tunlp用于显示tcp,udp的端口和进程等相关情况,如下图
netstat-tunlp|grep端口号,用于查看指定端口号的进程情况,如查看22端口的情况,netstat-tunlp|grep 22,如下图
怎么查看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~