如何在Linux中检查进程的执行时间

时间:2020-03-05 15:26:07  来源:igfitidea点击:

我们是否想知道如何在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秒。