linux查询io命令 linux的io查看

linux查看磁盘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操作是很频繁 。
linux wa%过高 , iostat查看io状况
1, 安装iostat
yum install sysstat
之后就可以使用 iostat 命令了,
2,入门使用
iostat -d -k 2
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次 。
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.) 。"一次传输"意思是"一次I/O请求" 。多个逻辑请求可能会被合并为"一次I/O请求" 。"一次传输"请求的大小是未知的 。kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes 。
指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同 。
iostat -d sda 2
默认监控所有的硬盘设备,现在指定只监控sda 。
3, -x 参数
iostat还有一个比较常用的选项 -x ,该选项将用于显示和io相关的扩展数据 。
iostat -d -x -k 1 10
输出信息的含义

4, 常见用法
iostat -d -k 1 10#查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2#查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10#查看设备使用率(\util)、响应时间(await) iostat -c 1 10 #查看cpu状态
5, 实例分析
iostat -d -k 1 | grep vda
Device:tpskB_read/skB_wrtn/skB_readkB_wrtn
sda1060.7218.9571.53395637647 1493241908
sda10299.024266.67129.414352132
sda10483.844589.904117.1745444076
sda10218.003360.00100.003360100
sda10546.008784.00124.008784124
sda10827.0013232.00136.0013232136
上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB 。
iostat -d -x -k 1
Device:rrqm/s wrqm/sr/sw/srsec/swsec/srkB/swkB/s avgrq-sz avgqu-szawaitsvctm\util
sda1.5628.317.84 31.5043.653.1621.821.581.190.030.802.6110.29
sda1.9824.75 419.806.93 13465.35253.476732.67126.7332.152.004.702.0085.25
sda3.0641.84 444.90 54.08 14204.08 2048.987102.041024.4932.572.104.211.8592.24
可以看到磁盘的平均响应时间5ms,磁盘使用率80 。磁盘响应正常 , 但是已经很繁忙了 。
可以看到磁盘的平均响应时间5ms,磁盘使用率90 。磁盘响应正常 , 但是已经很繁忙了 。
await:每一个IO请求的处理的平均时间(单位是微秒毫秒) 。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位) 。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,
如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢 。
\util: 在统计时间内所有处理IO时间,除以总共统计时间
所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使\util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈) 。
也可以使用下面的命令 , 同时显示cpu和磁盘的使用情况
【linux查询io命令 linux的io查看】 等待时间超过5ms, 磁盘io有问题
如何查看Linux下进程的IO活动状况 00 Hey,Linux您好,很高兴为您解答 。服务器cpu使用率不高,load比较高,所以要查看一下IO 。硬盘IO可以通过命令vmstat或iostat获得(也可以用yum安装dstat获得),网络IO可以用iftop命令获取 。但是不知道那个进程使用硬盘IO比较高,通过查找没有找到相关命令,只好自己写个脚本进行统计处理 。本脚本在CentOS6下(kernel2.6以上)python2.6测试通过 。直接运行脚本 , 默认情况下收集3秒钟数据,显示读写最高linux查询io命令的前三个进程 。如用参数可以使用命令“pythonfhip.py453” , 第一个数位每次收集读写数据linux查询io命令的间隔秒数,第二个数是打印出读写最多的n个进程,第三个为运行脚本的次数 。因为参数部分写的比较简单那,所以用参数必须3个全写 。。#!/bin/python#-*-coding:utf-8-*-#Filename:ind_high_io_process#Revision:1.0#Date:2013-3-8#Author:simonzhang#web:###ENDINITINFOimportosimportreimportsysimporttimefromstringimportstrip####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_tmpdefmain(_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=0try: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_pidres =""*(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_pidres =""*(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]printresprint"\n"*1if__name__=='__main__':try:_sleep_time=sys.argv[1]except:_sleep_time=3try:_num=sys.argv[2]except:_num=3try:loop=sys.argv[3]except:loop=1foriinrange(int(loop)):main(int(_sleep_time),int(_num))如若满意,请点击【采纳答案】,如若还有问题 , 请点击【追问】希望我的回答对您有所帮助,望采纳linux查询io命令!~O(∩_∩)O~
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查看linux是否开启异步IO命令如下:
[DATA@localhost ~]$ cat /proc/slabinfo | grep kio
kioctx 37 140 384 10 1 : tunables 54 27 8 : slabdata 14 14 0
kiocb 0 0 256 15 1 : tunables 120 60 8 : slabdata 0 0 0
返回结果中kiocp对应的前两项为0,说明系统中没有使用异步io 。
Linux如何查看与测试磁盘IO性能top命令的其他参数代表的含义详见top命令详解
sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能 。
sar 命令查看当前磁盘性能的命令为:
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.000.000.2533.4666.29
Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/s avgrq-sz avgqu-szawaitsvctm\util
sda0.000.000.000.000.000.000.000.000.000.000.000.000.00
sdb0.00112217.009.00192.00 9216.0096.004608.00123.79137.23 1033.4313.17 100.10
sdc0.000.000.000.000.000.000.000.000.000.000.000.000.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命令和linux的io查看的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读