在典型的Linux系統上有多個時間(1)命令;缺省值是一個bash(1)內建,它有點基本。還有/usr/bin/time
,你可以通過調用它就可以運行它,或者通過在反斜槓前加上前綴來告訴bash(1)不使用別名和內建函數:\time
。 Debian在默認安裝的「時間」包中包含它,Ubuntu可能是相同的,而其他發行版本會非常相似。
以類似的方式調用它的shell內建已經是更詳細和翔實的,儘管也許更不透明的,除非你已經很熟悉這些數字的真正含義:
$ \time df
[output elided]
0.00user 0.00system 0:00.01elapsed 66%CPU (0avgtext+0avgdata 864maxresident)k
0inputs+0outputs (0major+261minor)pagefaults 0swaps
不過,我會想提請你注意手冊頁列出了-f
選項自定義輸出格式,特別是%w
格式,計算過程中放棄了它的CPU時間片的I/O次數:
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=184
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=1
請注意,第一次運行停止了I/O 184次,但第二次運行僅停止了一次。第一個數字是可信的,因爲在我的~/Maildir
中有124個目錄:讀取目錄和inode給出的每個目錄大致有兩個IOPS,少一點因爲一些inode可能彼此相鄰並在一個操作中讀取,再加上一些在du(1)二進制文件,共享庫等中再次映射。
由於Linux的磁盤緩存,第二個數字當然更低。所以最後一塊是刷新緩存。同步(1)是一種熟悉的命令,它將髒寫入刷新到磁盤,但不刷新讀取高速緩存。你可以寫3到/proc/sys/vm/drop_caches
來刷新那個。 (其他值也是偶爾有用,但你想在這裏3)作爲非root用戶,要做到這一點最簡單的方法是:
echo 3 | sudo tee /proc/sys/vm/drop_caches
相結合,與/usr/bin/time
應該允許你建立你所需要的腳本以標杆命令你感興趣
作爲未成年人一邊,三通(1)使用,因爲這是行不通的。
sudo echo 3 >/proc/sys/vm/drop_caches
的原因是什麼?儘管echo(1)以root用戶身份運行,但重定向是您的普通用戶帳戶,它不具有對drop_caches
的寫入權限。 tee(1)以root身份有效地進行重定向。
[This SO question]的可能重複(http://stackoverflow.com/questions/249570/how-can-i-record-what-process-or-kernel-activity-is-using-the-disk- in-gnu-linux)或者[這個服務器故障問題](http://serverfault.com/questions/586774/getting-iops-of-the-processes-on-linux)由於賞金不能標記爲重複 – Appleman1234
你的操作系統是什麼?您是否檢查了[DTrace](http://www.brendangregg.com/dtrace.html),該文件適用於Unix/MacOS X/Solaris或[SystemTap](https://sourceware.org/systemtap/examples/keyword-index .html)哪些可以用於Linux? – VolenD