linux 查看 io(linux查看内存使用情况的命令)
老铁们,大家好,相信还有很多朋友对于linux 查看 io和linux查看内存使用情况的命令的相关问题不太懂,没关系,今天就由我来为大家分享分享linux 查看 io以及linux查看内存使用情况的命令的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
怎么查看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、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负载的主要来源及类型。
linux查看磁盘io的几种方法
怎样才能快速的定位到并发高是由于磁盘io开销大呢?可以通过三种方式:
第一种:用 top命令中的cpu信息观察
Top可以看到的cpu信息有:
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
具体的解释如下:
Tasks: 29 total进程总数
1 running正在运行的进程数
28 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
Cpu(s):
0.3% us用户空间占用CPU百分比
1.0% sy内核空间占用CPU百分比
0.0% ni用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id空闲CPU百分比
0.0% wa等待输入输出的CPU时间百分比
0.0% hi
0.0% si
0.0% wa的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。
第二种:用vmstat
vmstat命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU活动的统计信息。由 vmstat命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
输入命令:
vmstat 2 5
如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。
vmstat参数解释:
Procs
r:等待运行的进程数 b:处在非中断睡眠状态的进程数 w:被交换出去的可运行的进程数。此数由 linux计算得出,但 linux并不耗尽交换空间
Memory
swpd:虚拟内存使用情况,单位:KB
free:空闲的内存,单位KB
buff:被用来做为缓存的内存数,单位:KB
Swap
si:从磁盘交换到内存的交换页数量,单位:KB/秒
so:从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi:发送到块设备的块数,单位:块/秒
bo:从块设备接收到的块数,单位:块/秒
System
in:每秒的中断数,包括时钟中断
cs:每秒的环境(上下文)切换次数
CPU
按 CPU的总使用百分比来显示
us: CPU使用时间
sy: CPU系统使用时间
id:闲置时间
准测
更多vmstat使用信息
第二种:用iostat
安装:
Iostat是 sysstat工具集的一个工具,需要安装。
Centos的安装方式是:
yum install sysstat
Ubuntu的安装方式是:
aptitude install sysstat
使用:
iostat-dx显示磁盘扩展信息
root@fileapp:~# iostat-dx
r/s和 w/s分别是每秒的读操作和写操作,而rKB/s和wKB/s列以每秒千字节为单位显示了读和写的数据量
如果这两对数据值都很高的话说明磁盘io操作是很频繁。