在分析應用程序的效率或比較不同的算法時,其執行時間非常重要。
實戰演練(1)time命令可以測量出應用程序的執行時間:
$ time APPLICATION
time命令會執行APPLICATION。當APPLICATION執行完畢後,time命令将其real時間、sys時間以及user時間輸出到stderr中,将APPLICATION的正常輸出發送到stdout。
time命令的可執行二進制文件位于/usr/bin/time,另外還有一個bash shell的内建命令也叫作time。當執行time時,默認調用的是shell的内建命令。内建的time命令選項有限。如果需要使用額外的功能,應該使用可執行文件time的絕對路徑(/usr/bin/time)。
(2)選項-o可以将相關的時間統計信息寫入文件:
$ /usr/bin/time -o output.txt COMMAND
文件名應該出現在選項-o之後。
選項-a可以配合-o使用,将命令執行時間追加到原文件的末尾:
$ /usr/bin/time -a -o output.txt COMMAND
(3)選項-f可以指定輸出哪些統計信息及其格式。格式字符串包括一個或多個以%為前綴的參數。格式參數包括以下幾種。
❏ real時間: %e
❏ user時間: %U
❏ sys時間: %S
❏ 系統分頁大小:%Z
通過結合格式參數以及其他文本,我們就可以創建格式化輸出:
$ /usr/bin/time -f "FORMAT STRING" COMMAND
例如:
$ /usr/bin/time -f "Time: %U" -a -o timing.log uname
Linux
其中,%U指定了user時間。
time命令将被計時的應用程序的輸出發送到stdout,将自身的輸出發送到stderr。我們可以用重定向操作符(>)重定向應用程序輸出,用錯誤重定向操作符(2>)重定向time命令的輸出。
例如:
$ /usr/bin/time -f "Time: %U" uname> command_output.txt
2>time.log
$ cat time.log
Time: 0.00
$ cat command_output.txt
Linux
(4)格式參數也可以報告内存使用情況。參數%M會顯示所使用的最大内存(以KB為單位),參數%Z會顯示系統頁面大小:
$ /usr/bin/time -f "Max: %M K\nPage size: %Z bytes" \
ls>
/dev/null
Max: 996 K
Page size: 4096 bytes
這裡并不需要被計時的命令(ls)的輸出,因此将标準輸出重定向到了/dev/null。
工作原理time命令默認報告3類時間。
❏ Real:指的是壁鐘時間(wall clock time),也就是命令從開始執行到結束的時間。這段時間包括其他進程所占用的時間片(time slice)以及進程被阻塞時所消耗的時間(例如,為等待I/O操作完成所用的時間)。
❏ User:是指進程花費在用戶模式(内核模式之外)中的CPU時間。這是執行進程所花費的時間。執行其他進程以及花費在阻塞狀态中的時間并沒有計算在内。
❏ Sys:是指進程花費在内核中的CPU時間。它代表在内核中執行系統調用所使用的時間,這和庫代碼(library code)不同,後者仍舊運行在用戶空間。與“user時間”類似,這也是真正由進程使用的CPU時間。參考表9-1,其中簡要描述了内核模式(也稱為監督模式)和系統調用機制。
time命令給出了進程的很多細節信息。其中包括退出狀态、接收到的信号數量以及進程上下文的切換次數等。這些信息都可以通過給選項-f提供相應的格式化字符串來顯示。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!