使用 time 命令测量特定指令执行消耗的时间及系统资源

本文将介绍怎样利用time指令测量特定指令执行时小号的时间及系统资源信息

time 命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(修改系统时间是 date 命令干的事情)。

语法

time [options] COMMAND [arguments]

参数:

  • -o 或 --output=FILE:设定结果输出文件。这个选项会将 time 的输出写入所指定的文件中。如果文件已经存在,系统将覆写其内容。

  • -a 或 --append:配合 -o 使用,会将结果追加到文件的末端,而不会覆盖掉原来的内容。

  • -f FORMAT 或 --format=FORMAT:以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候,会用系统预设的格式。不过你可以用环境变量 time 来设定这个格式,如此一来就不必每次登入系统都要设定一次。

可用的 FORMAT 格式:

  • %E real时间,显示格式为[小时:]分钟:秒

  • %U user时间

  • %S sys时间

  • %C 进行计时的命令名称和命令行参数

  • %D 进程非共享数据区域,以KB为单位。

  • %x 命令退出状态

  • %k 进程接收到的信号数量

  • %W 进程被交换出主存的次数

  • %Z 系统的页面大小,这是一个系统常量,不用系统中常量值也不同

  • %P 进程所获取的CPU时间百分百,这个值等于user+system时间除以总共的运行时间

  • %K 进程的平均总内存使用量(data+stack+text),单位是KB

  • %w 进程主动进行上下文切换的次数,例如等待I/O操作完成

  • %c 进程被迫进行上下文切换的次数(由于时间片到期)

特别注意

shell 内建也有一个 time 命令,当直接运行 time 命令的时候是调用的系统内建 time 命令;因为系统内建 time 命令功能有限,所以需要 time 命令其他功能时,需要执行二进制文件 /usr/bin/time。

示例

(1)使用 time 统计 uname -a 指令执行耗时,如下:

hxstrive@ubuntu:~/Desktop$ time uname -a
Linux ubuntu 5.11.0-34-generic #36~20.04.1-Ubuntu SMP Fri Aug 27 08:06:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

real	0m0.002s
user	0m0.001s
sys	0m0.000s

上面示例中,执行命令“time uname -a”(见第1行)。系统先执行命令“uname -a”,第2行为命令“uname -a”的执行结果。

后续的为执行“uname -a”命令的时间统计结果,其中:

  • real 为实际时间

  • user 为用户CPU时间

  • sys 为系统CPU时间

以上三种时间的显示格式均为MMmNN[.FFF]s。

(2)使用-o选项将执行时间写入到文件中,如下:

hxstrive@ubuntu:~/Desktop$ /usr/bin/time -o ./time.txt uname -a
Linux ubuntu 5.11.0-38-generic #42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

hxstrive@ubuntu:~/Desktop$ ll
total 20
drwxr-xr-x  3 hxstrive hxstrive 4096 10月 23 20:56 ./
drwxr-xr-x 20 hxstrive hxstrive 4096 10月 21 13:32 ../
drwxrwxr-x  2 hxstrive hxstrive 4096 10月 21 13:33 bak/
-rw-rw-r--  1 hxstrive hxstrive  130 10月 23 20:56 time.txt

hxstrive@ubuntu:~/Desktop$ cat time.txt 
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 2156maxresident)k
0inputs+0outputs (0major+81minor)pagefaults 0swaps

(3)使用 -a 选项追加信息到 time.txt 文件,如下:

hxstrive@ubuntu:~/Desktop$ /usr/bin/time -a -o ./time.txt ls
bak  time.txt

hxstrive@ubuntu:~/Desktop$ cat time.txt 
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 2156maxresident)k
0inputs+0outputs (0major+81minor)pagefaults 0swaps
0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 2636maxresident)k
0inputs+0outputs (0major+118minor)pagefaults 0swaps

(4)使用 -f 选项格式化时间输出,如下:

hxstrive@ubuntu:~/Desktop$ /usr/bin/time -f "time: %U" ls
bak  time.txt
time: 0.00
阅读使人充实,会谈使人敏捷,写作使人精确。——培根
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号