linux測試io
A. 如何查找linux某個時刻磁碟io很高的原因
打開終端用top命令查看。輸入:
1
top
#查看swap
1
2
iostat
-x
1
10#查看%util
%idle
#如果
iostat
沒有要
yum
install
sysstat
1
#如果
%util
接近
100%,說明產生的i/o請求太多,i/o系統已經滿負荷,該磁碟可能存在瓶頸。idle小於70%
io壓力就較大了,一般讀取速度有較多的wait.
1
2
3
#如果你想對硬碟做一個io負荷的壓力測試可以用如下命令
time
dd
if=/dev/zero
bs=1m
count=2048
of=direct_2g
#此命令為在當前目錄下新建一個2g的文件
1
歡迎追問
B. 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的負荷情況。
C. 如何查看Linux下進程的IO活動狀況 00 Hey,Linux
您好,很高興為您解答。伺服器cpu使用率不高,load比較高,所以要查看一下IO。硬碟IO可以通過命令vmstat或iostat獲得(也可以用yum安裝dstat獲得),網路IO可以用iftop命令獲取。但是不知道那個進程使用硬碟IO比較高,通過查找沒有找到相關命令,只好自己寫個腳本進行統計處理。本腳本在CentOS6下(kernel2.6以上)python2.6測試通過。直接運行腳本,默認情況下收集3秒鍾數據,顯示讀寫最高的前三個進程。如用參數可以使用命令「pythonfhip.py453」,第一個數位每次收集讀寫數據的間隔秒數,第二個數是列印出讀寫最多的n個進程,第三個為運行腳本的次數。因為參數部分寫的比較簡單那,所以用參數必須3個全寫。。#!/bin/python#-*-coding:utf-8-*-#Filename:ind_high_io_process#Revision:1.0#Date:2013-3-8#Author:simonzhang#web:#######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))如若滿意,請點擊【採納答案】,如若還有問題,請點擊【追問】希望我的回答對您有所幫助,望採納!~O(∩_∩)O~
D. 如何監測Linux進程的實時IO讀寫情況
如何查看進程 IO 讀寫情況
Linux Kernel 2.6.20 以上的內核支持進程 IO 統計,可以用類似 iotop 這樣的工具來監測每個進程對 IO 操作的情況,就像用 top 來實時查看進程內存、CPU 等佔用情況那樣。但是對於 2.6.20 以下的 Linux 內核版本就沒那麼幸運了,根據 Stack Overflow 的這篇回帖 給出的方法,寫了一個簡單的 Python 腳本用來在 linux kernel < 2.6.20 下列印進程 IO 狀況。
Kernel < 2.6.20
這個腳本的想法很簡單,把 dmesg 的結果重定向到一個文件後再解析出來,每隔1秒鍾列印一次進程 IO 讀寫的統計信息,執行這個腳本需要 root:
#!/usr/bin/python
# Monitoring per-process disk I/O activity