您是否想過如何在 Linux 或 Unix 系統中找到進程的執行時間? 本指南將向您展示一些在 Linux 中嘗試查找進程執行時間時會派上用場的工具。
有時,您可能不得不處理執行速度較慢的進程或互聯網速度較慢或運行需要跟踪其執行時間的程序。 讓我們看看您應該為此嘗試的頂級工具。 本指南中顯示的每個命令都已在 Ubuntu 16.04 服務器和 CentOS 7 上進行了測試。
地表
Gnomon 是一個實用程序,用於使用時間戳註釋控制台日誌記錄語句並在 Linux 系統上查找慢速進程。 此工具對於長時間運行的流程非常有用,您希望獲得耗時的歷史記錄。
安裝 Gnomon
由於 Gnomon 是一個用 Node.js 編寫的工具,你需要在你的系統上安裝 Node.js,這樣你才能安裝 gnomon 高於海平面 包管理器。 一旦你有 高於海平面 工具存在於您的 Linux 系統上,然後使用以下命令繼續安裝它們:
$ npm install -g gnomon
/usr/local/bin/gnomon -> /usr/local/lib/node_modules/gnomon/bin/gnomon
+ [email protected]
added 56 packages in 13.076s
使用 Gnomon
要為每一行添加時間戳,您需要將命令通過管道傳送到 gnomon。 它將指示進程執行所需的時間。 默認情況下, gnomon 將顯示每行之間經過的秒數,但這是可配置的。
看看下面 example 它打印了對谷歌 DNS 服務器執行 5 次 ping 請求所花費的時間。
$ ping -c 5 8.8.8.8 | gnomon 0.0049s PING 8.8.8.8 (8.8.8.8): 56 data bytes
0.3603s 64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=179.114 ms
1.0025s 64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=182.345 ms
1.0008s 64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=183.636 ms
1.0119s 64 bytes from 8.8.8.8: icmp_seq=3 ttl=59 time=181.139 ms
0.0002s 64 bytes from 8.8.8.8: icmp_seq=4 ttl=59 time=190.970 ms
0.0002s
0.0001s --- 8.8.8.8 ping statistics ---
0.0001s 5 packets transmitted, 5 packets received, 0.0% packet loss
0.0020s round-trip min/avg/max/stddev = 179.114/183.441/190.970/4.048 ms
0.0002s
Total 3.3842s
經過的總時間是 3.3842s.
可用選項有:
以下是可用選項列表:
-t | –type=
要顯示的時間戳類型。
elapsed-line:顯示的行是最後一行的秒數。
elapsed-total:自進程開始以來的秒數。
絕對:UTC 中的絕對時間戳。
例子:
$ ping -c 3 8.8.8.8 | gnomon --type=elapsed-total
0.0049s PING 8.8.8.8 (8.8.8.8): 56 data bytes
0.2336s 64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=46.288 ms
1.2798s 64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=35.811 ms
1.2801s 64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=80.783 ms
1.2802s
1.2804s --- 8.8.8.8 ping statistics ---
1.2805s 3 packets transmitted, 3 packets received, 0.0% packet loss
1.2821s round-trip min/avg/max/stddev = 35.811/54.294/80.783/19.213 ms
1.2823s
Total 1.2824s
-f | –format=”format”: 格式化絕對時間戳,使用 PHP 日期格式字符串。 如果類型為 elapsed-line 或 elapsed-total,則忽略此選項。 默認格式為“H:i:su O”
-r | --real-time=<number|false>
禁用實時更新的示例:
# ping -c 3 8.8.8.8 | gnomon --real-time=false
0.0040s PING 8.8.8.8 (8.8.8.8): 56 data bytes
0.7847s 64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=69.803 ms
0.9316s 64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=140.597 ms
0.0001s 64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=68.122 ms
0.0001s
0.0001s --- 8.8.8.8 ping statistics ---
0.0001s 3 packets transmitted, 3 packets received, 0.0% packet loss
0.0020s round-trip min/avg/max/stddev = 68.122/92.841/140.597/33.776 ms
Total 1.7229s
-h | –high=seconds : 高門檻
-m | –medium=seconds :中等閾值。 就像上面描述的高閾值一樣工作,但將時間戳塗成明亮的顏色。
使用 ps 檢查運行進程時間
您可以使用 ps 命令來檢查特定進程已運行的時間。 您需要先找到進程 ID,然後使用它來查找經過的時間。
要識別進程 ID,您可以使用類似的工具 皮多夫
$ pidof mpd
1388
然後使用帶有選項的 ps -我的肉 找到經過的運行時間。
$ ps -p 1388 -o etime
ELAPSED
05-11:03:02
時間 選項顯示自進程啟動以來經過的時間,形式為 [[DD-]hh:]mm: ss。 所以從上面 example,進程已經運行了 5 天, 11 小時和 3 分鐘。 利用 時代 以秒為單位獲取經過時間的選項。
此命令選項也可用於多個進程。 這 example 下面將顯示我的 Ubuntu 服務器上所有進程的啟動時間和執行時間。
$ ps -eo pid,lstart,etime,args
輸出有 4 列:
PID –> 正在運行的進程的ID
開始 –> 進程最初啟動的時間
過去 –> 進程的總運行時間
命令 –> 處理執行的命令
在 Ubuntu 上使用 time 命令
time 命令報告命令在 Linux 系統上執行所需的時間。 如果在 Ubuntu 系統上丟失,您可以使用以下命令安裝它:
$ sudo apt-get install time
時間命令用法:
# time [-p] command [arguments...]
時間的輸出將有:
- 命令調用和終止之間經過的實時時間。
- 用戶 CPU 時間。
- 系統 CPU 時間。
考慮以下 example 檢查 /root 目錄的磁盤使用情況。
# time du -sh /root/
464K /root/
real 0m0.007s
user 0m0.002s
從輸出來看,命令執行的實際時間為 0m0.007s。
讓我們再做一個,ping 8.8.8.8
# time ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=7.28 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=11.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=7.54 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 7.281/8.925/11.952/2.145 ms
real 0m2.059s
user 0m0.001s
sys 0m
實際執行時間為 2.059 秒。
現在您知道如何在 Linux 上獲取 Linux 進程執行時間了。 第一種方法非常適合交互式過程。 對於在後台運行的進程,您始終可以使用 ps 命令獲取它們的執行時間。