如何在Linux中检查进程的执行时间
我们是否想知道如何在Linux或者Unix系统中找到进程的执行时间?
本教程将向我们展示许多工具,这些工具在尝试查找Linux中进程的执行时间时会派上用场。
有时,我们可能需要处理缓慢执行的进程,缓慢的Internet或者运行需要跟踪其执行时间的程序。
让我们看看我们应该为此尝试的顶级工具。
本教程中显示的每个命令均已在Ubuntu 16.04服务器和CentOS 7上进行了测试。
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。
它将指示该过程执行了多长时间。
默认情况下,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.3842s。
可用选项包括:
以下是可用选项的列表:
-t | --type=<elapsed-line|elapsed-total|absolute> :
要显示的时间戳记类型。
经过的行:显示的行是最后一行的秒数。
经过的总计:自流程开始以来经过的秒数。
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日期格式字符串格式化绝对时间戳。
如果类型是行行或者总计,则此选项将被忽略。
默认格式为“ H:i:s.u 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这样的工具
$pidof mpd 1388
然后将ps与-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
STARTED->最初开始该过程的时间
ELAPSED->流程的总运行时间
COMMAND->处理执行的命令
在Ubuntu上使用时间命令
time命令报告命令在Linux系统上执行所花费的时间。
如果在Ubuntu系统上缺少该文件,则可以使用以下命令进行安装:
$sudo apt-get install time
时间命令用法:
# time [-p] command [arguments...]
时间的输出将具有:
- 命令调用与终止之间经过的实时时间。
- 用户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秒。