在Linux或Unix系统中,你是否一直想知道如何找到进程的执行时间? 本指南将向你展示一些在Linux中查找进程执行时间时非常方便的工具。
本指南中显示的每个命令都已在Ubuntu服务器上和CentOS上进行了测试。
Gnomon
Gnomon是一个实用程序,用于用时间戳注释控制台日志记录语句,并且在Linux系统上查找缓慢的进程。对于长时间运行的流程,此工具非常有用,因为你需要记录长时间的历史记录。
安装Gnomon
由于Gnomon是用node.js编写的工具,需要安装Node.js,这样你就可以使用npm软件包管理器安装Gnomon ,在Linux系统上有了npm工具后,请继续使用以下方法安装它们:$ 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将显示每行之间经过的秒数,但这是可配置的。
请看下面的例子,该例子打印对google 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.384.
可用选项包括:
以下是可用选项的列表:
-t | --type= < elapsed-line|elapsed-total|absolute > :
要显示的时间戳类型,
elapsed-line:显示最后一行的秒数,
elapsed-total:自流程开始以来经过的秒数。
absolute :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:s.u O"-r | --real-time=
禁用实时更新的例子:# 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可以使用pidof之类的工具$ pidof mpd
1388
然后使用-o etime选项来查找已运行的运行时间。$ ps -p 1388 -o etime
ELAPSED
05-11:03:02
etime选项以[[DD-] hh:] mm的形式显示自启动进程以来经过的时间:ss,因此,从上面的示例来看,该进程已经运行了5天11个小时3分钟。使用etimes选项以秒为单位运行时间。
此命令选项也可用于多个进程,下面的例子将显示我的Ubuntu服务器上所有进程的开始时间和执行时间。$ ps -eo pid,lstart,etime,args
输出有4列:
正在运行进程的PID -- > ID
进程运行的-- >总运行时间
命令-- >进程执行命令
在Ubuntu上使用time命令
time命令报告命令在Linux系统上执行所花费的时间。如果在Ubuntu系统上缺少,你可以安装它:$ sudo apt-get install time
time命令用法:# time [-p] command [arguments...]
time的输出将有:命令调用与终止之间经过的实时时间,
用户CPU时间,
系统CPU时间,
以下示例检查/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命令来获取它们的执行时间。