自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux下的一些I/O統(tǒng)計(jì)工具(1)

系統(tǒng) Linux
作為一個(gè)Linux系統(tǒng)管理員,統(tǒng)計(jì)各類IO是一項(xiàng)必不可少的工作。其統(tǒng)計(jì)工具中iostat顯然又是最重要的一個(gè)統(tǒng)計(jì)手段。但是這里iostat不是本文的重點(diǎn),因?yàn)檫@個(gè)工具的使用在網(wǎng)絡(luò)上已經(jīng)有大量的教程,可以供大家參考。這里主要是想介紹一些其他統(tǒng)計(jì)工具以來滿足不同的需求。

作為一個(gè)Linux系統(tǒng)管理員,統(tǒng)計(jì)各類IO是一項(xiàng)必不可少的工作。其統(tǒng)計(jì)工具中iostat顯然又是最重要的一個(gè)統(tǒng)計(jì)手段。但是這里iostat不是本文的重點(diǎn),因?yàn)檫@個(gè)工具的使用在網(wǎng)絡(luò)上已經(jīng)有大量的教程,可以供大家參考。這里主要是想介紹一些其他統(tǒng)計(jì)工具以來滿足不同的需求。

iostat

iostat的功能異常強(qiáng)大,輸出項(xiàng)也特別多,比如下面這個(gè)例子:

  1. Device: rrqm/s  wrqm/s  r/s     w/s    rkB/s    wkB/s    avgrq-sz avgqu-sz   await r_await w_await  svctm  %util  
  2.  
  3. sda     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 

其各項(xiàng)的含義分別是:

  • rrqm/s: 每秒進(jìn)行 merge 的讀操作數(shù)目.即 delta(rmerge)/s
  • wrqm/s: 每秒進(jìn)行 merge 的寫操作數(shù)目.即 delta(wmerge)/s
  • r/s: 每秒完成的讀 I/O 設(shè)備次數(shù).即 delta(rio)/s
  • w/s: 每秒完成的寫 I/O 設(shè)備次數(shù).即 delta(wio)/s
  • rsec/s: 每秒讀扇區(qū)數(shù).即 delta(rsect)/s
  • wsec/s: 每秒寫扇區(qū)數(shù).即 delta(wsect)/s
  • rkB/s: 每秒讀K字節(jié)數(shù).是 rsect/s 的一半,因?yàn)槊可葏^(qū)大小為512字節(jié).(需要計(jì)算)
  • wkB/s: 每秒寫K字節(jié)數(shù).是 wsect/s 的一半.(需要計(jì)算)
  • avgrq-sz: 平均每次設(shè)備I/O操作的數(shù)據(jù)大小 (扇區(qū)).delta(rsect+wsect)/delta(rio+wio)
  • avgqu-sz: 平均I/O隊(duì)列長度.即 delta(aveq)/s/1000 (因?yàn)閍veq的單位為毫秒).
  • await: 平均每次設(shè)備I/O操作的等待時(shí)間 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
  • svctm: 平均每次設(shè)備I/O操作的服務(wù)時(shí)間 (毫秒).即 delta(use)/delta(rio+wio)
  • %util: 一秒中有百分之多少的時(shí)間用于 I/O 操作,或者說一秒中有多少時(shí)間 I/O 隊(duì)列是非空的.即 delta(use)/s/1000 (因?yàn)閡se的單位為毫秒)

如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸.

idle小于70% IO壓力就較大了,一般讀取速度有較多的wait.

同時(shí)可以結(jié)合vmstat查看查看b參數(shù)(等待資源的進(jìn)程數(shù))和wa參數(shù)(IO等待所占用的CPU時(shí)間的百分比,高過30%時(shí)IO壓力高)

另外 await 的參數(shù)也要多和 svctm 來參考。差的過高就一定有 IO 的問題.

avgqu-sz 也是個(gè)做 IO 調(diào)優(yōu)時(shí)需要注意的地方,這個(gè)就是直接每次操作的數(shù)據(jù)的大小,如果次數(shù)多,但數(shù)據(jù)拿的小的話,其實(shí) IO 也會很小.如果數(shù)據(jù)拿的大,才IO 的數(shù)據(jù)會高.也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是講,讀定速度是這個(gè)來決定的.

svctm 一般要小于 await (因?yàn)橥瑫r(shí)等待的請求的等待時(shí)間被重復(fù)計(jì)算了),svctm 的大小一般和磁盤性能有關(guān),CPU/內(nèi)存的負(fù)荷也會對其有影響,請求過多也會間接導(dǎo)致 svctm 的增加.await 的大小一般取決于服務(wù)時(shí)間(svctm) 以及 I/O 隊(duì)列的長度和 I/O 請求的發(fā)出模式.如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時(shí)間;如果 await 遠(yuǎn)大于 svctm,說明 I/O 隊(duì)列太長,應(yīng)用得到的響應(yīng)時(shí)間變慢,如果響應(yīng)時(shí)間超過了用戶可以容許的范圍,這時(shí)可以考慮更換更快的磁盤,調(diào)整內(nèi)核 elevator 算法,優(yōu)化應(yīng)用,或者升級 CPU.

隊(duì)列長度(avgqu-sz)也可作為衡量系統(tǒng) I/O 負(fù)荷的指標(biāo),但由于 avgqu-sz 是按照單位時(shí)間的平均值,所以不能反映瞬間的 I/O 洪水.

有時(shí)間的話,我會單獨(dú)寫幾個(gè)帖子來說說iostat。#p#

iodump

iodump 是一個(gè)統(tǒng)計(jì)每一個(gè)進(jìn)程(線程)所消耗的磁盤I/O工具。這個(gè)一個(gè)perl腳本,其原理時(shí)打開有關(guān)I/O的內(nèi)核記錄消息開關(guān),而后讀取消息然后分析輸出。簡單使用步驟如下:

首先下載這個(gè)工具:

wget http://aspersa.googlecode.com/svn/trunk/iodump

然后打開有關(guān)I/O內(nèi)核消息的開關(guān):

echo 1 >/proc/sys/vm/block_dump

上述開關(guān)打開后,內(nèi)核會記錄下每一個(gè)I/O操作的消息。我們只需要定時(shí)獲取并分析就好了,比如下面這樣:

while true; do sleep 1; dmesg -c ; done |perl iodump

等待一段時(shí)間,然后通過ctrl+c來結(jié)束上述腳本,你將獲得下面類似的信息:

  1. TASK                   PID      TOTAL       READ      WRITE      DIRTY DEVICES  
  2. postgres              5799       1919       1919          0          0 sda7  
  3. jbd2/sda7-8           1572         35          0         35          0 sda7  
  4. jbd2/sda2-8            250         32          0         32          0 sda2  
  5. flush-8:0             2229         31          0         31          0 sda2, sda7  
  6. postgres              4308          2          0          2          0 sda7  
  7. bash                  5804          1          0          1          0 sda2 

上述輸出的單位為塊(block),每塊的大小取決于創(chuàng)建文件系統(tǒng)時(shí)指定的塊大小。比如我這個(gè)里的sda7的block大小是1KB。#p#

iotop

iotop是一個(gè)Python編寫的工具,有類似top工具的UI,包括一些參數(shù)也和top類似。不過它對系統(tǒng)有一些要求,分別是:

  1. Python ≥ 2.5 or Python ≥ 2.4 with the ctypes module
  2. Kernel ≥ 2.6.20
  3. Kernel uses options:
    1. TASK_DELAY_ACCT
    2. CONFIG_TASKSTATS
    3. TASK_IO_ACCOUNTING
    4. CONFIG_VM_EVENT_COUNTERS

如果是基于RPM包的系統(tǒng),可以直接下載編譯好的二進(jìn)制包(here)或者二進(jìn)制源代碼包(here)

如果是Debian/Ubuntu系統(tǒng),直接使用

sudo apt-get install iotop

即可(不得不說,Debian系統(tǒng)提供的軟件真的是相當(dāng)豐富呀),其他系統(tǒng)則可以通過下面的指令下載源代碼,然后編譯

git clone git://repo.or.cz/iotop.git

具體的使用方法可以參考iotop(8)手冊,下面是在我機(jī)器上的一個(gè)顯示:

  1. iotop -o -u wgzhao  
  2. Total DISK READ:       2.15 M/s | Total DISK WRITE:    1601.15 K/s  
  3.   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND  
  4.  5984 be/4 wgzhao      2.15 M/s   70.55 K/s  0.00 % 83.67 % postgres: wgzhao pgbench [local] UPDATE  
  5.  4305 be/4 wgzhao      0.00 B/s  227.34 K/s  0.00 %  0.00 % postgres: writer process  
  6.  4308 be/4 wgzhao      0.00 B/s   90.15 K/s  0.00 %  0.00 % postgres: stats collector process 

#p#

iopp

iopp是另外一個(gè)統(tǒng)計(jì)每一個(gè)進(jìn)程I/O的工具,使用C語言編寫,理論上應(yīng)該比上述兩個(gè)重狙效率都要高。
安裝方法很簡單,首先通過下面的指令下載源代碼:

git://github.com/markwkm/iopp.git

然后分別通過下面的指令編譯安裝

  1. cmake CMakeLists.txt  
  2. make  
  3. make install DESTDIR=/usr 

下面是一個(gè)使用例子

  1. iopp -i -c 2  
  2.   pid    rchar    wchar    syscr    syscw   rbytes   wbytes  cwbytes command  
  3.  2144        0      296       40        8        0        0        0 /usr/sbin/LCDd  
  4.  2284        0        0        2        0        0        0        0 ha_logd: read process  
  5.  2299        0        0        2        0        0        0        0 ha_logd: write process  
  6.  2520        3        3        3        3        0        0        0 /usr/lib/virtualbox/vboxwebsrv  
  7.  2599        2        2        2        2        0        0        0 /usr/lib/virtualbox/VBoxSVC  
  8.  2675        0        0        1        0        0        0        0 runsvdir  
  9.  3177       16       16        4        2        0        0        0 /usr/bin/gnome-shell  
  10.  3192       16       16        4        2        0        0        0 nautilus  
  11.  3305      180      340      100       60        0        0        0 /usr/lib/icedove/icedove-bin  
  12.  3623     1393     1440        1        1        0        0        0 sshd: wgzhao@pts/0  
  13.  4305        0  4603904        0      562        0  4603904        0 postgres: writer process     
  14.  6257  2064384  1892352      252      215  3719168   139264        0 postgres: wgzhao pgbench [local] UPDATE 

上述輸出的各項(xiàng)含義是:

  • pid 進(jìn)程ID
  • rchar 將要從磁盤讀取的字節(jié)數(shù)
  • wchar 已經(jīng)寫入或應(yīng)該要寫入磁盤的字節(jié)數(shù)
  • syscr 讀I/O數(shù)
  • syscw 寫I/O數(shù)
  • rbytes 真正從磁盤讀取的字節(jié)數(shù)
  • wbytes 真正寫入到磁盤的字節(jié)數(shù)
  • cwbytes 因?yàn)榍蹇枕撁婢彺娑鴮?dǎo)致沒有發(fā)生操作的字節(jié)數(shù)
  • command 執(zhí)行的命令

其中rbytes,wbytes,cwbytes會因給出-k或者-m參數(shù),而顯示為rkb,wkb,cwkb或rmb,wmb,cwmb。command一列如果給出-c的參數(shù)則顯示完整的命令名而不僅僅只是命令本身。
這些參數(shù)的使用和top類似。

更具體的可以參考iopp(8)手冊。#p#

dstat

dstat 號稱各種資源統(tǒng)計(jì)工具,其目的是想替代vmstat,iostat,netstat,ifstat等各種單一統(tǒng)計(jì)工具,從而做到All in one。 dstat用Python語言編寫。

dstat能夠清晰顯示每列的信息,特別是單位及大小很明確,不會在單位換算上犯迷糊和失誤。最重要的是,因?yàn)樗腔谀K化設(shè)計(jì),因此我們可以很容易的寫一個(gè)插件來收集我們需要的統(tǒng)計(jì)信息。

另外,dstat的輸出還可以導(dǎo)出為CSV格式文件,從而可以在電子表格工具里分方便的生成統(tǒng)計(jì)圖形。

目前dstat的插件已經(jīng)相當(dāng)多了,這是我機(jī)器上目前的輸出:

  1. $ dstat  --list  
  2. internal:  
  3.   aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net,   
  4.   page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm  
  5. /usr/share/dstat:  
  6.   battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt,   
  7.   dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre,   
  8.   memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-io, mysql5-keys, net-packets, nfs3,   
  9.   nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze,   
  10.   squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime,   
  11.   top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp,   
  12.   vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi 

下面給出幾個(gè)使用的列子(實(shí)際輸出是帶彩色的,很容易識別)

dstat的缺省輸出

  1. wgzhao-nb:~# dstat  
  2. You did not select any stats, using -cdngy by default.  
  3. ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--  
  4. usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw   
  5.   2   1  87  10   0   0| 816k  385k|   0     0 |   0     0 |2279  7048   
  6.   5   1  78  16   0   0|2600k    0 | 140B  940B|   0     0 |5952    13k  
  7.   5   3  80  12   0   0|2896k  182k|  70B  358B|   0     0 |6074    14k  
  8.   4   2  78  16   0   0|2724k    0 |  70B  374B|   0     0 |5703    15k  
  9.   4   2  81  14   0   0|3008k    0 |  70B  358B|   0     0 |5924    13k  
  10.   5   1  80  14   0   0|1976k   17k|  70B  358B|   0     0 |5819    13k  
  11.   5   2  79  14   0   0|2056k    0 | 198B  374B|   0     0 |5618    13k  
  12.   4   2  79  15   0   0|2416k    0 |  70B  358B|   0     0 |5866    15k  
  13.   5   2  78  15   0   0|2528k    0 |  70B  358B|   0     0 |6356    14k  
  14.   5   2  78  16   0   0|2288k    0 |  70B  358B|   0     0 |6515    15k  
  15.   5   2  79  14   0   0|2656k 8192B|  70B  358B|   0     0 |6490    15k  
  16.   3   2  81  13   0   0|2296k    0 |  70B  374B|   0     0 |5573    15k  
  17.   4   3  76  17   0   1|2224k    0 |  70B  358B|   0     0 |5366    12k  
  18.   5   1  81  13   0   0|2208k    0 | 508B  358B|   0     0 |5403    13k  
  19.   4   2  79  15   0   0|2024k  182k|  70B  358B|   0     0 |5583    13k  
  20.   5   2  79  15   0   0|2148k   17k| 186B  490B|   0     0 |5400    12k 

指定需要顯示的列

  1. wgzhao-nb:~# dstat  -c --top-cpu -d --top-bio --top-latency  
  2. Module dstat_top_latency failed to load. (Kernel has no scheduler statistics, use at least 2.6.12)  
  3. ----total-cpu-usage---- -most-expensive- -dsk/total- ----most-expensive----  
  4. usr sys idl wai hiq siq|  cpu process   | read  writ|  block i/o process     
  5.   2   1  87  10   0   0|gnome-shell  0.7| 826k  384k|postgres    692k   52k  
  6.   4   2  79  16   0   0|postgres: wgz3.0|1744k  776k|postgres: w1744k   72k  
  7.   5   3  78  15   0   0|postgres: wgz5.0|3120k    0 |postgres: w3064k  136k  
  8.   6   2  73  19   0   0|postgres: wgz4.2|2608k  285k|postgres: w2608k  136k  
  9.   4   2  77  17   0   0|postgres: wgz3.5|2112k  848k|postgres: w2112k   88k  
  10.   3   2  71  25   0   0|postgres: wgz2.0| 944k 1049k|postgres: w 936k   48k  
  11.   3   2  58  37   0   0|postgres: wgz2.0| 920k 2070k|postgres: w 928k   64k  
  12.   3   2  62  34   0   0|postgres: wgz2.2|1496k  992k|postgres: w1608k   72k  
  13.   3   2  56  38   0   0|postgres: wgz3.0|1840k  645k|postgres: w1856k   88k  
  14.   3   2  78  17   0   0|postgres: wgz3.0|1420k 1200k|postgres: w1292k   80k  
  15.   5   2  80  12   0   1|postgres: wgz4.2|2628k    0 |postgres: w2636k  112k  
  16.   4   3  69  25   0   0|postgres: wgz3.8|2168k  576k|postgres: w2224k  104k 

指定需要顯示的列,并同時(shí)將結(jié)果導(dǎo)出到文件

  1. wgzhao-nb:~# dstat  --disk --mem --proc --io --sys --filesystem --tcp --vm --output dstat.csv  
  2. -dsk/total- ------memory-usage----- ---procs--- --io/total- ---system-- --filesystem- ----tcp-sockets---- -----virtual-memory----  
  3.  read  writ| used  buff  cach  free|run blk new| read  writ| int   csw |files  inodes|lis act syn tim clo|majpf minpf alloc  free  
  4.  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   
  5. 2128k 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   
  6.  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   
  7. 2124k 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   
  8. 2344k 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   
  9. 1572k 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   
  10.  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   
  11. 2452k 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   
  12. 1552k 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   
  13. 1192k 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   
  14. 2668k  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   
  15. 1712k  960k| 827M 19.4M 2940M  106M|  0 2.0   0| 122   113 |4454    14k| 4928  12284 | 11   3   0   0   2|   0   182   616     2 

更詳細(xì)的用法,可以參考dstat(1)手冊。

原文鏈接:http://blog.wgzhao.com/2012/08/22/some-way-to-io-statistics-on-linux/

 

責(zé)任編輯:黃丹 來源: blog
相關(guān)推薦

2013-06-07 14:57:27

Linux系統(tǒng)管理員IO統(tǒng)計(jì)工具

2021-05-21 11:20:36

Linux命令文件

2015-03-26 09:34:27

APP設(shè)計(jì)UI設(shè)計(jì)UX工具

2009-11-23 10:14:10

Linuxroute命令輸出信息

2017-02-05 18:00:01

Linux虛擬內(nèi)存統(tǒng)計(jì)工具

2011-01-14 09:25:28

LinuxIO機(jī)制

2013-11-21 11:07:12

2014-03-12 15:34:21

2023-03-09 17:54:04

2017-10-16 14:40:50

數(shù)據(jù)庫MySQL工具

2021-02-22 17:06:58

Linux改動代碼

2022-02-17 13:58:38

Linux技巧文件

2014-08-14 09:25:31

Linux串口

2017-08-23 09:26:16

Chromelive 狀態(tài)代碼

2017-01-19 19:14:20

Linux重定向命令

2010-05-28 14:44:42

Linux開發(fā)工具

2014-05-13 09:55:13

iOS開發(fā)工具

2012-06-15 09:41:40

Linux內(nèi)核

2024-03-11 15:08:26

Linux操作系統(tǒng)進(jìn)程

2020-06-03 17:30:42

LinuxIO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號