原文:
https://www.pianshen.com/article/4664449845/
http://blog.sciencenet.cn/blog-830496-782593.html
在運行的程序之前加 time 最后得出三個時間 real、 user、 sys, real是程序的實際運行時間,sys是內核態的時間,user是用戶態的時間,單核情況,real遠遠大於user和sys之和。
real,從程序開始到程序執行結束時所消耗的時間,包括CPU的用時和所有延遲程序執行的因素的總和。CPU用時被划分為user和sys兩塊。user表示程序本身,以及它所調用的庫中的子例程使用的時間。sys是由程序直接或間接調用的系統調用執行的時間。
real=cpu用時+其他因素時間
cpu 用時=user+sys
所以: real> user + sys (單核情況)
time命令結果有三行組成:real、user和sys。CPU用時被划分為user和sys兩塊。
real值表示從程序開始到程序執行結束時所消耗的時間,包括CPU的用時。
user值表示程序本身,以及它所調用的庫中的子例程使用的時間。
sys是由程序直接或間接調用的系統調用執行的時間。
在單處理器上,real值和整個CPU用時之差,也就是real - ( user + sys )是所有延遲程序執行的因素的總和。
使用示例
示例一 統計運行時間
[root@web186 root]# time find . -name "mysql.sh"
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
real 0m14.837s
user 0m0.030s
sys 0m0.120s
[root@web186 root]#
注:real遠大於user加上sys,因為find需要遍歷各個目錄,需要大量的I/O操作,而磁盤I/O通常是最慢的環節,因此大部分時間find進程都在等待磁盤I/O完成。
[root@web186 root]# time find . -name "mysql.sh"
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
real 0m0.230s
user 0m0.040s
sys 0m0.030s
注:再次運行的時候,發現real time變得很小了,應該是操作系統將剛才操作過的一些文件緩存了的緣故,因而大大減少了磁盤I/O。
* Real 是時鍾時間,程序從開始至結束的總時間。他包括期間其他進程所占用的時間片和進程被阻塞的時間(如IO等待的時間)
* User 被測試程序在用戶模式下所花的CPU時間。他是進程執行的正真的CPU時間。其他進程調度的時間片以及阻塞(如IO)的時間不包含在內。
* Sys 是進程在內核中所花費的CPU時間。他表示進程在內核調用中所花的CPU時間,而程序的庫調用仍然運行在用戶空間下。
User+Sys表示程序所執行的CPU時間(不包括IO以及其他進程的CPU時間).