摘要:\u003C\u002Fp\u003E\u003Cp\u003E 目前dstat的插件已经相当多了,这是我机器上目前的输出:\u003C\u002Fp\u003E\u003Cpre\u003E$ dstat --list\u003Cbr\u003Einternal:\u003Cbr\u003E aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, \u003Cbr\u003E page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm\u003Cbr\u003E\u002Fusr\u002Fshare\u002Fdstat:\u003Cbr\u003E battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, \u003Cbr\u003E dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, \u003Cbr\u003E memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-io, mysql5-keys, net-packets, nfs3, \u003Cbr\u003E nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, \u003Cbr\u003E squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, \u003Cbr\u003E top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, \u003Cbr\u003E vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 下面给出几个使用的列子(实际输出是带彩色的,很容易识别)\u003C\u002Fp\u003E\u003Cp\u003E dstat的缺省输出\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat\u003Cbr\u003EYou did not select any stats, using -cdngy by default.\u003Cbr\u003E----total-cpu-usage---- -dsk\u002Ftotal- -net\u002Ftotal- ---paging-- ---system--\u003Cbr\u003Eusr sys idl wai hiq siq| read writ| recv send| in out | int csw \u003Cbr\u003E 2 1 87 10 0 0| 816k 385k| 0 0 | 0 0 |2279 7048 \u003Cbr\u003E 5 1 78 16 0 0|2600k 0 | 140B 940B| 0 0 |5952 13k\u003Cbr\u003E 5 3 80 12 0 0|2896k 182k| 70B 358B| 0 0 |6074 14k\u003Cbr\u003E 4 2 78 16 0 0|2724k 0 | 70B 374B| 0 0 |5703 15k\u003Cbr\u003E 4 2 81 14 0 0|3008k 0 | 70B 358B| 0 0 |5924 13k\u003Cbr\u003E 5 1 80 14 0 0|1976k 17k| 70B 358B| 0 0 |5819 13k\u003Cbr\u003E 5 2 79 14 0 0|2056k 0 | 198B 374B| 0 0 |5618 13k\u003Cbr\u003E 4 2 79 15 0 0|2416k 0 | 70B 358B| 0 0 |5866 15k\u003Cbr\u003E 5 2 78 15 0 0|2528k 0 | 70B 358B| 0 0 |6356 14k\u003Cbr\u003E 5 2 78 16 0 0|2288k 0 | 70B 358B| 0 0 |6515 15k\u003Cbr\u003E 5 2 79 14 0 0|2656k 8192B| 70B 358B| 0 0 |6490 15k\u003Cbr\u003E 3 2 81 13 0 0|2296k 0 | 70B 374B| 0 0 |5573 15k\u003Cbr\u003E 4 3 76 17 0 1|2224k 0 | 70B 358B| 0 0 |5366 12k\u003Cbr\u003E 5 1 81 13 0 0|2208k 0 | 508B 358B| 0 0 |5403 13k\u003Cbr\u003E 4 2 79 15 0 0|2024k 182k| 70B 358B| 0 0 |5583 13k\u003Cbr\u003E 5 2 79 15 0 0|2148k 17k| 186B 490B| 0 0 |5400 12k\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 指定需要显示的列\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat -c --top-cpu -d --top-bio --top-latency\u003Cbr\u003EModule dstat_top_latency failed to load. (Kernel has no scheduler statistics, use at least 2.6.12)\u003Cbr\u003E----total-cpu-usage---- -most-expensive- -dsk\u002Ftotal- ----most-expensive----\u003Cbr\u003Eusr sys idl wai hiq siq| cpu process | read writ| block i\u002Fo process \u003Cbr\u003E 2 1 87 10 0 0|gnome-shell 0.7| 826k 384k|postgres 692k 52k\u003Cbr\u003E 4 2 79 16 0 0|postgres: wgz3.0|1744k 776k|postgres: w1744k 72k\u003Cbr\u003E 5 3 78 15 0 0|postgres: wgz5.0|3120k 0 |postgres: w3064k 136k\u003Cbr\u003E 6 2 73 19 0 0|postgres: wgz4.2|2608k 285k|postgres: w2608k 136k\u003Cbr\u003E 4 2 77 17 0 0|postgres: wgz3.5|2112k 848k|postgres: w2112k 88k\u003Cbr\u003E 3 2 71 25 0 0|postgres: wgz2.0| 944k 1049k|postgres: w 936k 48k\u003Cbr\u003E 3 2 58 37 0 0|postgres: wgz2.0| 920k 2070k|postgres: w 928k 64k\u003Cbr\u003E 3 2 62 34 0 0|postgres: wgz2.2|1496k 992k|postgres: w1608k 72k\u003Cbr\u003E 3 2 56 38 0 0|postgres: wgz3.0|1840k 645k|postgres: w1856k 88k\u003Cbr\u003E 3 2 78 17 0 0|postgres: wgz3.0|1420k 1200k|postgres: w1292k 80k\u003Cbr\u003E 5 2 80 12 0 1|postgres: wgz4.2|2628k 0 |postgres: w2636k 112k\u003Cbr\u003E 4 3 69 25 0 0|postgres: wgz3.8|2168k 576k|postgres: w2224k 104k\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 指定需要显示的列,并同时将结果导出到文件\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat --disk --mem --proc --io --sys --filesystem --tcp --vm --output dstat.csv\u003Cbr\u003E-dsk\u002Ftotal- ------memory-usage----- ---procs--- --io\u002Ftotal- ---system-- --filesystem- ----tcp-sockets---- -----virtual-memory----\u003Cbr\u003E read writ| used buff cach free|run blk new| read writ| int csw |files inodes|lis act syn tim clo|majpf minpf alloc free\u003Cbr\u003E 844k 404k| 829M 19.4M 2920M 124M| 0 0.0 0.7|47.5 38.4 |2336 7185 | 4928 12286 | 11 3 0 0 2| 1 620 602 605 \u003Cbr\u003E2128k 1526k| 828M 19.4M 2915M 130M| 0 2.0 0| 111 157 |4588 14k| 4928 12285 | 11 3 0 0 2| 0 1859 995 2278 \u003Cbr\u003E 920k 2151k| 826M 19.4M 2917M 129M| 0 2.0 0|52.0 237 |3091 7540 | 4928 12284 | 11 3 0 0 2| 0 4448 2330 2144 \u003Cbr\u003E2124k 1003k| 826M 19.4M 2921M 126M|1.0 1.0 0| 135 106 |4705 14k| 4928 12284 | 11 3 0 0 2| 0 331 865 1 \u003Cbr\u003E2344k 1024k| 826M 19.4M 2924M 122M|1.0 2.0 0| 121 118 |4074 13k| 4928 12284 | 11 3 0 0 2| 0 249 953 1 \u003Cbr\u003E1572k 1624k| 827M 19.4M 2926M 120M|1.0 2.0 0|87.0 190 |3231 11k| 4928 12284 | 11 3 0 0 2| 0 98 530 1 \u003Cbr\u003E 916k 788k| 827M 19.4M 2928M 119M| 0 2.0 0|68.0 92.0 |3452 8709 | 4928 12284 | 11 3 0 0 2| 0 128 383 4 \u003Cbr\u003E2452k 1665k| 826M 19.4M 2931M 116M|1.0 1.0 0| 132 197 |4779 14k| 4928 12284 | 11 3 0 0 2| 0 208 822 1 \u003Cbr\u003E1552k 1328k| 827M 19.4M 2933M 114M| 0 2.0 0|97.0 156 |3762 9117 | 4928 12284 | 11 3 0 0 2| 0 133 473 1 \u003Cbr\u003E1192k 2024k| 827M 19.4M 2934M 112M| 0 2.0 0|81.0 239 |4068 11k| 4928 12284 | 11 3 0 0 2| 0 135 414 2 \u003Cbr\u003E2668k 584k| 827M 19.4M 2937M 109M| 0 2.0 0| 148 71.0 |4415 10k| 4928 12284 | 11 3 0 0 2| 0 174 870 4 \u003Cbr\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6), groupId: '6717592654219051524。不过它对系统有一些要求,分别是:\u003C\u002Fp\u003E\u003Cp\u003EPython ≥ 2.5 or Python ≥ 2.4 with the ctypes module\u003C\u002Fp\u003E\u003Cp\u003EKernel ≥ 2.6.20\u003C\u002Fp\u003E\u003Cp\u003EKernel uses options:\u003C\u002Fp\u003E\u003Cp\u003ETASK_DELAY_ACCT\u003C\u002Fp\u003E\u003Cp\u003ECONFIG_TASKSTATS\u003C\u002Fp\u003E\u003Cp\u003ETASK_IO_ACCOUNTING\u003C\u002Fp\u003E\u003Cp\u003ECONFIG_VM_EVENT_COUNTERS\u003C\u002Fp\u003E\u003Cp\u003E 如果是基于RPM包的系统,可以直接下载编译好的二进制包(here)或者二进制源代码包(here)\u003C\u002Fp\u003E\u003Cp\u003E 如果是Debian\u002FUbuntu系统,直接使用\u003C\u002Fp\u003E\u003Cp\u003E sudo apt-get install iotop\u003C\u002Fp\u003E\u003Cp\u003E 即可(不得不说,Debian系统提供的软件真的是相当丰富呀),其他系统则可以通过下面的指令下载源代码,然后编译\u003C\u002Fp\u003E\u003Cp\u003E git clone git:\u002F\u002Frepo.or.cz\u002Fiotop.git\u003C\u002Fp\u003E\u003Cp\u003E 具体的使用方法可以参考iotop(8)手册,下面是在我机器上的一个显示:\u003C\u002Fp\u003E\u003Cpre\u003Eiotop -o -u wgzhao\u003Cbr\u003ETotal DISK READ: 2.15 M\u002Fs | Total DISK WRITE: 1601.15 K\u002Fs\u003Cbr\u003E TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND\u003Cbr\u003E 5984 be\u002F4 wgzhao 2.15 M\u002Fs 70.55 K\u002Fs 0.00 % 83.67 % postgres: wgzhao pgbench [local] UPDATE\u003Cbr\u003E 4305 be\u002F4 wgzhao 0.00 B\u002Fs 227.34 K\u002Fs 0.00 % 0.00 % postgres: writer process\u003Cbr\u003E 4308 be\u002F4 wgzhao 0.00 B\u002Fs 90.15 K\u002Fs 0.00 % 0.00 % postgres: stats collector process\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003Eiopp\u003C\u002Fp\u003E\u003Cp\u003E iopp是另外一个统计每一个进程I\u002FO的工具,使用C语言编写,理论上应该比上述两个重狙效率都要高。

"\u003Cdiv\u003E\u003Cp\u003E 作为一个Linux系统管理员,统计各类IO是一项必不可少的工作。其统计工具中iostat显然又是最重要的一个统计手段。但是这里iostat不是本文的重点,因为这个工具的使用在网络上已经有大量的教程,可以供大家参考。这里主要是想介绍一些其他统计工具以来满足不同的需求。\u003C\u002Fp\u003E\u003Cp\u003Eiostat\u003C\u002Fp\u003E\u003Cp\u003E iostat的功能异常强大,输出项也特别多,比如下面这个例子:\u003C\u002Fp\u003E\u003Cpre\u003EDevice: rrqm\u002Fs wrqm\u002Fs r\u002Fs w\u002Fs rkB\u002Fs wkB\u002Fs avgrq-sz avgqu-sz await r_await w_await svctm %util\u003Cbr\u003Esda 0.00 0.50 173.50 73.50 3076.00 604.00 29.80 149.93 676.58 74.36 2098.15 4.05 100.00\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 其各项的含义分别是:\u003C\u002Fp\u003E\u003Cp\u003Errqm\u002Fs: 每秒进行 merge 的读操作数目.即 delta(rmerge)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003Ewrqm\u002Fs: 每秒进行 merge 的写操作数目.即 delta(wmerge)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003Er\u002Fs: 每秒完成的读 I\u002FO 设备次数.即 delta(rio)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003Ew\u002Fs: 每秒完成的写 I\u002FO 设备次数.即 delta(wio)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003Ersec\u002Fs: 每秒读扇区数.即 delta(rsect)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003Ewsec\u002Fs: 每秒写扇区数.即 delta(wsect)\u002Fs\u003C\u002Fp\u003E\u003Cp\u003ErkB\u002Fs: 每秒读K字节数.是 rsect\u002Fs 的一半,因为每扇区大小为512字节.(需要计算)\u003C\u002Fp\u003E\u003Cp\u003EwkB\u002Fs: 每秒写K字节数.是 wsect\u002Fs 的一半.(需要计算)\u003C\u002Fp\u003E\u003Cp\u003Eavgrq-sz: 平均每次设备I\u002FO操作的数据大小 (扇区).delta(rsect+wsect)\u002Fdelta(rio+wio)\u003C\u002Fp\u003E\u003Cp\u003Eavgqu-sz: 平均I\u002FO队列长度.即 delta(aveq)\u002Fs\u002F1000 (因为aveq的单位为毫秒).\u003C\u002Fp\u003E\u003Cp\u003Eawait: 平均每次设备I\u002FO操作的等待时间 (毫秒).即 delta(ruse+wuse)\u002Fdelta(rio+wio)\u003C\u002Fp\u003E\u003Cp\u003Esvctm: 平均每次设备I\u002FO操作的服务时间 (毫秒).即 delta(use)\u002Fdelta(rio+wio)\u003C\u002Fp\u003E\u003Cp\u003E%util: 一秒中有百分之多少的时间用于 I\u002FO 操作,或者说一秒中有多少时间 I\u002FO 队列是非空的.即 delta(use)\u002Fs\u002F1000 (因为use的单位为毫秒)\u003C\u002Fp\u003E\u003Cp\u003E 如果 %util 接近 100%,说明产生的I\u002FO请求太多,I\u002FO系统已经满负荷,该磁盘可能存在瓶颈.\u003C\u002Fp\u003E\u003Cp\u003E idle小于70% IO压力就较大了,一般读取速度有较多的wait.\u003C\u002Fp\u003E\u003Cp\u003E 同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)\u003C\u002Fp\u003E\u003Cp\u003E 另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题.\u003C\u002Fp\u003E\u003Cp\u003E avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r\u002Fs or w\u002Fs ) = rsec\u002Fs or wsec\u002Fs.也就是讲,读定速度是这个来决定的.\u003C\u002Fp\u003E\u003Cp\u003E svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU\u002F内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加.await 的大小一般取决于服务时间(svctm) 以及 I\u002FO 队列的长度和 I\u002FO 请求的发出模式.如果 svctm 比较接近 await,说明 I\u002FO 几乎没有等待时间;如果 await 远大于 svctm,说明 I\u002FO 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU.\u003C\u002Fp\u003E\u003Cp\u003E 队列长度(avgqu-sz)也可作为衡量系统 I\u002FO 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I\u002FO 洪水.\u003C\u002Fp\u003E\u003Cp\u003E 有时间的话,我会单独写几个帖子来说说iostat。\u003C\u002Fp\u003E\u003Cp\u003Eiodump\u003C\u002Fp\u003E\u003Cp\u003E iodump 是一个统计每一个进程(线程)所消耗的磁盘I\u002FO工具。这个一个perl脚本,其原理时打开有关I\u002FO的内核记录消息开关,而后读取消息然后分析输出。简单使用步骤如下:\u003C\u002Fp\u003E\u003Cp\u003E 首先下载这个工具\u003C\u002Fp\u003E\u003Cp\u003E wget http:\u002F\u002Faspersa.googlecode.com\u002Fsvn\u002Ftrunk\u002Fiodump\u003C\u002Fp\u003E\u003Cp\u003E 然后打开有关I\u002FO内核消息的开关\u003C\u002Fp\u003E\u003Cp\u003E echo 1 >\u002Fproc\u002Fsys\u002Fvm\u002Fblock_dump\u003C\u002Fp\u003E\u003Cp\u003E 上述开关打开后,内核会记录下每一个I\u002FO操作的消息。我们只需要定时获取并分析就好了,比如下面这样\u003C\u002Fp\u003E\u003Cp\u003E while true; do sleep 1; dmesg -c ; done |perl iodump\u003C\u002Fp\u003E\u003Cp\u003E 等待一段时间,然后通过ctrl+c来结束上述脚本,你将获得下面类似的信息:\u003C\u002Fp\u003E\u003Cpre\u003ETASK PID TOTAL READ WRITE DIRTY DEVICES\u003Cbr\u003Epostgres 5799 1919 1919 0 0 sda7\u003Cbr\u003Ejbd2\u002Fsda7-8 1572 35 0 35 0 sda7\u003Cbr\u003Ejbd2\u002Fsda2-8 250 32 0 32 0 sda2\u003Cbr\u003Eflush-8:0 2229 31 0 31 0 sda2, sda7\u003Cbr\u003Epostgres 4308 2 0 2 0 sda7\u003Cbr\u003Ebash 5804 1 0 1 0 sda2\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 上述输出的单位为块(block),每块的大小取决于创建文件系统时指定的块大小。比如我这个里的sda7的block大小是1KB。\u003C\u002Fp\u003E\u003Cp\u003Eiotop\u003C\u002Fp\u003E\u003Cp\u003E iotop是一个Python编写的工具,有类似top工具的UI,包括一些参数也和top类似。不过它对系统有一些要求,分别是:\u003C\u002Fp\u003E\u003Cp\u003EPython ≥ 2.5 or Python ≥ 2.4 with the ctypes module\u003C\u002Fp\u003E\u003Cp\u003EKernel ≥ 2.6.20\u003C\u002Fp\u003E\u003Cp\u003EKernel uses options:\u003C\u002Fp\u003E\u003Cp\u003ETASK_DELAY_ACCT\u003C\u002Fp\u003E\u003Cp\u003ECONFIG_TASKSTATS\u003C\u002Fp\u003E\u003Cp\u003ETASK_IO_ACCOUNTING\u003C\u002Fp\u003E\u003Cp\u003ECONFIG_VM_EVENT_COUNTERS\u003C\u002Fp\u003E\u003Cp\u003E 如果是基于RPM包的系统,可以直接下载编译好的二进制包(here)或者二进制源代码包(here)\u003C\u002Fp\u003E\u003Cp\u003E 如果是Debian\u002FUbuntu系统,直接使用\u003C\u002Fp\u003E\u003Cp\u003E sudo apt-get install iotop\u003C\u002Fp\u003E\u003Cp\u003E 即可(不得不说,Debian系统提供的软件真的是相当丰富呀),其他系统则可以通过下面的指令下载源代码,然后编译\u003C\u002Fp\u003E\u003Cp\u003E git clone git:\u002F\u002Frepo.or.cz\u002Fiotop.git\u003C\u002Fp\u003E\u003Cp\u003E 具体的使用方法可以参考iotop(8)手册,下面是在我机器上的一个显示:\u003C\u002Fp\u003E\u003Cpre\u003Eiotop -o -u wgzhao\u003Cbr\u003ETotal DISK READ: 2.15 M\u002Fs | Total DISK WRITE: 1601.15 K\u002Fs\u003Cbr\u003E TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND\u003Cbr\u003E 5984 be\u002F4 wgzhao 2.15 M\u002Fs 70.55 K\u002Fs 0.00 % 83.67 % postgres: wgzhao pgbench [local] UPDATE\u003Cbr\u003E 4305 be\u002F4 wgzhao 0.00 B\u002Fs 227.34 K\u002Fs 0.00 % 0.00 % postgres: writer process\u003Cbr\u003E 4308 be\u002F4 wgzhao 0.00 B\u002Fs 90.15 K\u002Fs 0.00 % 0.00 % postgres: stats collector process\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003Eiopp\u003C\u002Fp\u003E\u003Cp\u003E iopp是另外一个统计每一个进程I\u002FO的工具,使用C语言编写,理论上应该比上述两个重狙效率都要高。安装方法很简单,首先通过下面的指令下载源代码:\u003C\u002Fp\u003E\u003Cp\u003E git:\u002F\u002Fgithub.com\u002Fmarkwkm\u002Fiopp.git\u003C\u002Fp\u003E\u003Cp\u003E 然后分别通过下面的指令编译安装\u003C\u002Fp\u003E\u003Cpre\u003Ecmake CMakeLists.txt\u003Cbr\u003Emake\u003Cbr\u003Emake install DESTDIR=\u002Fusr\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 下面是一个使用例子\u003C\u002Fp\u003E\u003Cpre\u003Eiopp -i -c 2\u003Cbr\u003E pid rchar wchar syscr syscw rbytes wbytes cwbytes command\u003Cbr\u003E 2144 0 296 40 8 0 0 0 \u002Fusr\u002Fsbin\u002FLCDd\u003Cbr\u003E 2284 0 0 2 0 0 0 0 ha_logd: read process\u003Cbr\u003E 2299 0 0 2 0 0 0 0 ha_logd: write process\u003Cbr\u003E 2520 3 3 3 3 0 0 0 \u002Fusr\u002Flib\u002Fvirtualbox\u002Fvboxwebsrv\u003Cbr\u003E 2599 2 2 2 2 0 0 0 \u002Fusr\u002Flib\u002Fvirtualbox\u002FVBoxSVC\u003Cbr\u003E 2675 0 0 1 0 0 0 0 runsvdir\u003Cbr\u003E 3177 16 16 4 2 0 0 0 \u002Fusr\u002Fbin\u002Fgnome-shell\u003Cbr\u003E 3192 16 16 4 2 0 0 0 nautilus\u003Cbr\u003E 3305 180 340 100 60 0 0 0 \u002Fusr\u002Flib\u002Ficedove\u002Ficedove-bin\u003Cbr\u003E 3623 1393 1440 1 1 0 0 0 sshd: wgzhao@pts\u002F0\u003Cbr\u003E 4305 0 4603904 0 562 0 4603904 0 postgres: writer process \u003Cbr\u003E 6257 2064384 1892352 252 215 3719168 139264 0 postgres: wgzhao pgbench [local] UPDATE\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 上述输出的各项含义是:\u003C\u002Fp\u003E\u003Cp\u003Epid 进程ID\u003C\u002Fp\u003E\u003Cp\u003Erchar 将要从磁盘读取的字节数\u003C\u002Fp\u003E\u003Cp\u003Ewchar 已经写入或应该要写入磁盘的字节数\u003C\u002Fp\u003E\u003Cp\u003Esyscr 读I\u002FO数\u003C\u002Fp\u003E\u003Cp\u003Esyscw 写I\u002FO数\u003C\u002Fp\u003E\u003Cp\u003Erbytes 真正从磁盘读取的字节数\u003C\u002Fp\u003E\u003Cp\u003Ewbytes 真正写入到磁盘的字节数\u003C\u002Fp\u003E\u003Cp\u003Ecwbytes 因为清空页面缓存而导致没有发生操作的字节数\u003C\u002Fp\u003E\u003Cp\u003Ecommand 执行的命令\u003C\u002Fp\u003E\u003Cp\u003E 其中rbytes,wbytes,cwbytes会因给出-k或者-m参数,而显示为rkb,wkb,cwkb或rmb,wmb,cwmb。command一列如果给出-c的参数则显示完整的命令名而不仅仅只是命令本身。这些参数的使用和top类似。\u003C\u002Fp\u003E\u003Cp\u003E 更具体的可以参考iopp(8)手册。\u003C\u002Fp\u003E\u003Cp\u003Edstat\u003C\u002Fp\u003E\u003Cp\u003E dstat 号称各种资源统计工具,其目的是想替代vmstat,iostat,netstat,ifstat等各种单一统计工具,从而做到All in one。 dstat用Python语言编写。\u003C\u002Fp\u003E\u003Cp\u003E dstat能够清晰显示每列的信息,特别是单位及大小很明确,不会在单位换算上犯迷糊和失误。最重要的是,因为它是基于模块化设计,因此我们可以很容易的写一个插件来收集我们需要的统计信息。\u003C\u002Fp\u003E\u003Cp\u003E 另外,dstat的输出还可以导出为CSV格式文件,从而可以在电子表格工具里分方便的生成统计图形。\u003C\u002Fp\u003E\u003Cp\u003E 目前dstat的插件已经相当多了,这是我机器上目前的输出:\u003C\u002Fp\u003E\u003Cpre\u003E$ dstat --list\u003Cbr\u003Einternal:\u003Cbr\u003E aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, \u003Cbr\u003E page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm\u003Cbr\u003E\u002Fusr\u002Fshare\u002Fdstat:\u003Cbr\u003E battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, \u003Cbr\u003E dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, \u003Cbr\u003E memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-io, mysql5-keys, net-packets, nfs3, \u003Cbr\u003E nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, \u003Cbr\u003E squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, \u003Cbr\u003E top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, \u003Cbr\u003E vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 下面给出几个使用的列子(实际输出是带彩色的,很容易识别)\u003C\u002Fp\u003E\u003Cp\u003E dstat的缺省输出\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat\u003Cbr\u003EYou did not select any stats, using -cdngy by default.\u003Cbr\u003E----total-cpu-usage---- -dsk\u002Ftotal- -net\u002Ftotal- ---paging-- ---system--\u003Cbr\u003Eusr sys idl wai hiq siq| read writ| recv send| in out | int csw \u003Cbr\u003E 2 1 87 10 0 0| 816k 385k| 0 0 | 0 0 |2279 7048 \u003Cbr\u003E 5 1 78 16 0 0|2600k 0 | 140B 940B| 0 0 |5952 13k\u003Cbr\u003E 5 3 80 12 0 0|2896k 182k| 70B 358B| 0 0 |6074 14k\u003Cbr\u003E 4 2 78 16 0 0|2724k 0 | 70B 374B| 0 0 |5703 15k\u003Cbr\u003E 4 2 81 14 0 0|3008k 0 | 70B 358B| 0 0 |5924 13k\u003Cbr\u003E 5 1 80 14 0 0|1976k 17k| 70B 358B| 0 0 |5819 13k\u003Cbr\u003E 5 2 79 14 0 0|2056k 0 | 198B 374B| 0 0 |5618 13k\u003Cbr\u003E 4 2 79 15 0 0|2416k 0 | 70B 358B| 0 0 |5866 15k\u003Cbr\u003E 5 2 78 15 0 0|2528k 0 | 70B 358B| 0 0 |6356 14k\u003Cbr\u003E 5 2 78 16 0 0|2288k 0 | 70B 358B| 0 0 |6515 15k\u003Cbr\u003E 5 2 79 14 0 0|2656k 8192B| 70B 358B| 0 0 |6490 15k\u003Cbr\u003E 3 2 81 13 0 0|2296k 0 | 70B 374B| 0 0 |5573 15k\u003Cbr\u003E 4 3 76 17 0 1|2224k 0 | 70B 358B| 0 0 |5366 12k\u003Cbr\u003E 5 1 81 13 0 0|2208k 0 | 508B 358B| 0 0 |5403 13k\u003Cbr\u003E 4 2 79 15 0 0|2024k 182k| 70B 358B| 0 0 |5583 13k\u003Cbr\u003E 5 2 79 15 0 0|2148k 17k| 186B 490B| 0 0 |5400 12k\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 指定需要显示的列\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat -c --top-cpu -d --top-bio --top-latency\u003Cbr\u003EModule dstat_top_latency failed to load. (Kernel has no scheduler statistics, use at least 2.6.12)\u003Cbr\u003E----total-cpu-usage---- -most-expensive- -dsk\u002Ftotal- ----most-expensive----\u003Cbr\u003Eusr sys idl wai hiq siq| cpu process | read writ| block i\u002Fo process \u003Cbr\u003E 2 1 87 10 0 0|gnome-shell 0.7| 826k 384k|postgres 692k 52k\u003Cbr\u003E 4 2 79 16 0 0|postgres: wgz3.0|1744k 776k|postgres: w1744k 72k\u003Cbr\u003E 5 3 78 15 0 0|postgres: wgz5.0|3120k 0 |postgres: w3064k 136k\u003Cbr\u003E 6 2 73 19 0 0|postgres: wgz4.2|2608k 285k|postgres: w2608k 136k\u003Cbr\u003E 4 2 77 17 0 0|postgres: wgz3.5|2112k 848k|postgres: w2112k 88k\u003Cbr\u003E 3 2 71 25 0 0|postgres: wgz2.0| 944k 1049k|postgres: w 936k 48k\u003Cbr\u003E 3 2 58 37 0 0|postgres: wgz2.0| 920k 2070k|postgres: w 928k 64k\u003Cbr\u003E 3 2 62 34 0 0|postgres: wgz2.2|1496k 992k|postgres: w1608k 72k\u003Cbr\u003E 3 2 56 38 0 0|postgres: wgz3.0|1840k 645k|postgres: w1856k 88k\u003Cbr\u003E 3 2 78 17 0 0|postgres: wgz3.0|1420k 1200k|postgres: w1292k 80k\u003Cbr\u003E 5 2 80 12 0 1|postgres: wgz4.2|2628k 0 |postgres: w2636k 112k\u003Cbr\u003E 4 3 69 25 0 0|postgres: wgz3.8|2168k 576k|postgres: w2224k 104k\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E 指定需要显示的列,并同时将结果导出到文件\u003C\u002Fp\u003E\u003Cpre\u003Ewgzhao-nb:~# dstat --disk --mem --proc --io --sys --filesystem --tcp --vm --output dstat.csv\u003Cbr\u003E-dsk\u002Ftotal- ------memory-usage----- ---procs--- --io\u002Ftotal- ---system-- --filesystem- ----tcp-sockets---- -----virtual-memory----\u003Cbr\u003E read writ| used buff cach free|run blk new| read writ| int csw |files inodes|lis act syn tim clo|majpf minpf alloc free\u003Cbr\u003E 844k 404k| 829M 19.4M 2920M 124M| 0 0.0 0.7|47.5 38.4 |2336 7185 | 4928 12286 | 11 3 0 0 2| 1 620 602 605 \u003Cbr\u003E2128k 1526k| 828M 19.4M 2915M 130M| 0 2.0 0| 111 157 |4588 14k| 4928 12285 | 11 3 0 0 2| 0 1859 995 2278 \u003Cbr\u003E 920k 2151k| 826M 19.4M 2917M 129M| 0 2.0 0|52.0 237 |3091 7540 | 4928 12284 | 11 3 0 0 2| 0 4448 2330 2144 \u003Cbr\u003E2124k 1003k| 826M 19.4M 2921M 126M|1.0 1.0 0| 135 106 |4705 14k| 4928 12284 | 11 3 0 0 2| 0 331 865 1 \u003Cbr\u003E2344k 1024k| 826M 19.4M 2924M 122M|1.0 2.0 0| 121 118 |4074 13k| 4928 12284 | 11 3 0 0 2| 0 249 953 1 \u003Cbr\u003E1572k 1624k| 827M 19.4M 2926M 120M|1.0 2.0 0|87.0 190 |3231 11k| 4928 12284 | 11 3 0 0 2| 0 98 530 1 \u003Cbr\u003E 916k 788k| 827M 19.4M 2928M 119M| 0 2.0 0|68.0 92.0 |3452 8709 | 4928 12284 | 11 3 0 0 2| 0 128 383 4 \u003Cbr\u003E2452k 1665k| 826M 19.4M 2931M 116M|1.0 1.0 0| 132 197 |4779 14k| 4928 12284 | 11 3 0 0 2| 0 208 822 1 \u003Cbr\u003E1552k 1328k| 827M 19.4M 2933M 114M| 0 2.0 0|97.0 156 |3762 9117 | 4928 12284 | 11 3 0 0 2| 0 133 473 1 \u003Cbr\u003E1192k 2024k| 827M 19.4M 2934M 112M| 0 2.0 0|81.0 239 |4068 11k| 4928 12284 | 11 3 0 0 2| 0 135 414 2 \u003Cbr\u003E2668k 584k| 827M 19.4M 2937M 109M| 0 2.0 0| 148 71.0 |4415 10k| 4928 12284 | 11 3 0 0 2| 0 174 870 4 \u003Cbr\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6), groupId: '6717592654219051524
相关文章