目录
在 Linux 操作系统中,查找命令的执行时间对于优化系统性能、调试程序以及评估脚本效率至关重要。
一、使用时间命令
时间命令(time)是一个内置的 shell 命令,用于测量其他命令或程序的执行时间。它的使用非常简单,只需在要执行的命令之前加上 time 即可。
[root@master ~]#time ls
anaconda-ks.cfg main.py 公共 图片 音乐
data.json redis-5.0.7.tar.gz 模板 文档 桌面
initial-setup-ks.cfg webmin-2.100-1.noarch.rpm 视频 下载
real 0m0.002s
user 0m0.000s
sys 0m0.002s
字段 | 含义 |
---|---|
real | 实际时间,即从命令开始执行到完成所花费的时间。 |
user | 用户 CPU 时间,即 CPU 执行用户程序的时间。 |
sys | 系统 CPU 时间,即 CPU 执行内核程序的时间。 |
这些时间的单位通常是秒(s),但如果时间较长,也可能显示为分钟(m)和小时(h)。
二、使用Bash内置变量
Bash shell 提供了一个内置的变量 $SECONDS,它可以用来测量命令的执行时间。该变量存储自 shell 启动以来经过的秒数。
[root@master ~]#start=$sencods
[root@master ~]#ls
anaconda-ks.cfg main.py 公共 图片 音乐
data.json redis-5.0.7.tar.gz 模板 文档 桌面
initial-setup-ks.cfg webmin-2.100-1.noarch.rpm 视频 下载
[root@master ~]#end=$sencods
[root@master ~]#echo "Elapsed time: $((end-start)) seconds."
Elapsed time: 0 seconds.
三、使用Perf工具
perf 工具是 Linux 性能分析工具套件中的一部分,它提供了丰富的性能分析功能,包括测量命令执行时间。
[root@master ~]#yum install perf.x86_64 -y
[root@master ~]#perf stat ls
anaconda-ks.cfg main.py 公共 图片 音乐
data.json redis-5.0.7.tar.gz 模板 文档 桌面
initial-setup-ks.cfg webmin-2.100-1.noarch.rpm 视频 下载
Performance counter stats for 'ls':
0.81 msec task-clock # 0.640 CPUs utilized
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
325 page-faults # 0.401 M/sec
<not supported> cycles
<not supported> instructions
<not supported> branches
<not supported> branch-misses
0.001265749 seconds time elapsed
0.001241000 seconds user
0.000000000 seconds sys
此输出提供了丰富的性能统计信息,包括任务时钟、上下文切换、CPU 迁移、页面错误、CPU 周期、指令数量、分支数量等。通过这些统计信息,您可以更详细地了解命令执行期间系统的性能状况。
四、使用GNU time工具
GNU time 是一个独立的时间命令,它比内置的 time 命令更加灵活,并且提供了更多的选项。
[root@master ~]#/usr/bin/time -v ls
anaconda-ks.cfg main.py 公共 图片 音乐
data.json redis-5.0.7.tar.gz 模板 文档 桌面
initial-setup-ks.cfg webmin-2.100-1.noarch.rpm 视频 下载
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 100%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
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): 1188
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 362
Voluntary context switches: 1
Involuntary context switches: 1
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
执行以上命令后,您将看到详细的时间统计信息,包括 CPU 使用情况、内存使用情况等。这些信息对于深入了解命令的执行情况非常有帮助,尤其是在进行性能优化或调试时。
五、使用Strace工具
strace 是一个强大的系统调用跟踪工具,它可以跟踪进程的系统调用并记录下来,包括每个系统调用的执行时间。
[root@master ~]#yum install strace.x86_64 -y
[root@master ~]#strace -c ls
anaconda-ks.cfg main.py 公共 图片 音乐
data.json redis-5.0.7.tar.gz 模板 文档 桌面
initial-setup-ks.cfg webmin-2.100-1.noarch.rpm 视频 下载
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
13.53 0.000018 6 3 munmap
10.53 0.000014 1 12 open
9.77 0.000013 4 3 write
9.02 0.000012 1 10 read
9.02 0.000012 0 18 mprotect
6.77 0.000009 0 15 close
6.77 0.000009 0 29 mmap
6.77 0.000009 4 2 getdents
6.02 0.000008 4 2 2 statfs
5.26 0.000007 7 1 openat
3.01 0.000004 0 13 fstat
3.01 0.000004 2 2 ioctl
2.26 0.000003 0 4 3 access
1.50 0.000002 2 1 1 stat
1.50 0.000002 0 3 brk
1.50 0.000002 2 1 futex
0.75 0.000001 0 2 rt_sigaction
0.75 0.000001 1 1 rt_sigprocmask
0.75 0.000001 1 1 getrlimit
0.75 0.000001 1 1 set_tid_address
0.75 0.000001 1 1 set_robust_list
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00 0.000133 127 6 total
此输出将显示每个系统调用的执行时间统计信息,包括调用的百分比、总时间、平均每次调用的时间等。通过分析这些信息,您可以进一步了解命令执行期间系统调用的性能状况。
六、补充
除了以上提到的工具之外,还可以利用 Linux 系统自带的一些工具来测量命令的执行时间,比如 /usr/bin/time、top、ps 等。这些工具提供了不同的性能统计信息和分析功能,可以根据具体需求选择合适的工具进行使用。