Linux Time命令-统计命令的执行时间
嘻嘻发布于2021-09-10
最后更新于2021年9月10日
浏览文章目录
在Linux终端下执行命令可以极大的提高生产开发效率,但是当一个命令执行的时间过长或者我们需要诊断命令执行效率时,你该用哪个命令呢?这里你就必须要指导time命令的用法,它用于确定给定命令运行所需的时间。
它有助于测试脚本和命令的性能(即帮助查找shell脚本的执行时间或命令完成所需的时间)。
如何使用Linux time命令
要使用time命令,只需使用要作为输入运行的命令/程序执行time即可。请检查下面的示例
$ time ping linoxide.com
output
PING linoxide.com (104.27.115.15) 56(84) bytes of data.
64 bytes from 104.27.115.15 (104.27.115.15): icmp_seq=1 ttl=58 time=1.77 ms
64 bytes from 104.27.115.15 (104.27.115.15): icmp_seq=2 ttl=58 time=2.12 ms
64 bytes from 104.27.115.15 (104.27.115.15): icmp_seq=3 ttl=58 time=1.65 ms
--- linoxide.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10016ms
rtt min/avg/max/mdev = 1.118/1.476/2.124/0.362 ms
real 0m10.536s
user 0m0.002s
sys 0m0.007s
实数表示“ping”命令从执行到终止所用的挂钟时间,user和sys表示ping用户空间和内核空间所用的时间。
如何使time命令将其输出写入文件
要将时间命令输出写入文件而不是打印输出屏幕,请使用-o命令行选项,该选项需要文件名/路径作为输入。
$ /usr/bin/time -o /home/smart/time-output.txt ping linoxide.com
现在我们将在stdout上显示ping的输出,而time命令输出将写入文本文件。
注意:我们使用/usr/bin/time而不是time,因为shell内置的time命令不提供-o选项。
如何将其输出附加到现有文件
要将时间命令输出附加到现有文件而不是覆盖它,请使用-a命令行选项。
$ /usr/bin/time -a /home/smart/time-output.txt ping linoxide.com
如何获得linux time命令的详细输出
我们可以使用-v命令行选项生成详细的输出。
$ time -v ping linoxide.com
`output
Command being timed: "ping linoxide.com"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:11.77
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3064
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 158
Voluntary context switches: 14
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0`
如何自定义time命令输出
There are a large number of formatting options as shown in the following list
有大量格式选项,如下表所示
C-使用的名称和命令行参数
D—进程非共享数据区域的平均大小(以KB为单位)
E-时钟格式的已用时间
F-页面错误数
I-进程的文件系统输入数
K-进程的平均总内存使用量(KB)
M-最大驻留设置进程在生存期内的大小(以KB为单位)
O-进程的文件系统输出数
P—作业接收到的CPU百分比
R-轻微或可恢复的页面错误数
S—系统在内核模式下使用的CPU秒总数
U-用户模式使用的CPU总秒数
W—进程从主内存中交换的次数
X-进程中共享文本的平均数量
Z-系统的页面大小(以KB为单位)
c—进程被上下文切换的次数
e-进程使用的已用实时时间(秒)
k-传递给过程的信号数量
p—进程的平均非共享堆栈大小(以KB为单位)
r—进程接收的套接字消息数
s—进程发送的套接字消息数
t-进程的平均驻留集大小(KB)
w—进程自动切换上下文的时间数
x-命令的退出状态
我们可以按如下方式使用格式化开关:
$ time -f "Elapsed Time = %E, Inputs %I, Outputs %O"
上述命令的输出如下所示:
Elapsed Time = 0:01:00, Inputs 2, Outputs 1
如果要添加新行作为格式字符串的一部分,请使用新行字符,如下所示:
$ time -f "Elapsed Time = %E \n Inputs %I \n Outputs %O"
Linux time命令版本
有三种时间命令版本:Bash、Zsh和Gnu-time命令。我们可以使用type命令来确定time是二进制还是内置关键字。
$ type time
output
# Bash
time is a shell keyword
# Zsh
time is a reserved word
# GNU time (sh)
time is /usr/bin/time
已有1个小伙伴在吐槽
time命令很有用可以配合curl命令调试API接口慢的问题