Linuxio分析命令 linux 分析hprof( 三 )


sar 命令查看当前磁盘性能的命令为Linuxio分析命令:
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活动状况 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:###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))如若满意,请点击【采纳答案】,如若还有问题,请点击【追问】希望我的回答对您有所帮助,望采纳!~O(∩_∩)O~

推荐阅读