最近在使用 time 命令时,无意间发现了一些隐藏的小秘密和强大功能,今天分享给大家。
time 在 Linux 下是比较常用的命令,可以帮助我们方便的计算程序的运行时间,对比采用不同方案时程序的运行性能。看似简单的命令,其实蕴藏着很多细节和技巧,来跟着肖邦一起学习吧。
1 基础用法详解
先来看下最基础的用法,也可能是大家最常见的用法了
root@chopin:~$ time find . -name "chopin.txt"
......
real 0m0.174s
user 0m0.084s
sys 0m0.084s
可以很清楚看到,find 命令执行的时间为 0.174s,是不是很简单,很方便呢
不过,time 命令输出了三个参数,我们只用到了第一个参数,其它两个参数代表什么含义呢?
这里我来解释一下:
- real:表示的是墙上时间,说白了,其实就是从程序运行开始到结束所经历的时间;
- user:表示程序运行期间,cpu 在用户态所花费的时间;
- sys:表示程序运行期间,cpu 在内核态所花费的时间;
细心的读者会发现,上述案例中的 user + sys 不等于 real,这是怎么回事呢?
其实上边解释的 user 和 sys,是 cpu 执行指令所消耗的时间,并不包含:进程阻塞 IO、调度排队,这些非 cpu 运行时间。
案例中 find 执行查找文件过程中,会有磁盘 IO 读取,这时 cpu 会被释放出来干别的事情,这些 IO 消耗的时间,是不包含在 user 和 sys 统计数据中,所以就出现了 real 时间大于 user + sys 了。
再通过一个示例来验证并加强我们的理解
root@chopin:~$ time sleep 2
real 0m2.001s
user 0m0.000s
sys 0m0.000s
可以清楚地看到,sleep 命令基本上没有消耗 cpu,程序真实的运行时间就是 2 秒
那我们是不是可以得出如下结论了呢:
real >= user + sys
其实这个结论在单个 cpu 情况下,是正确的。
如果服务器是多个 cpu,你的程序正好可以将多个 cpu 充分利用起来,程序运行期间是多核心并行的,那么 user + sys 统计的 cp
本文介绍了Linux中time命令的基础用法、可能遇到的假time问题以及GNU time的高级功能,包括详细统计信息、自定义格式输出和性能分析中的作用。通过理解CPU时间、上下文切换和缺页异常等概念,有助于分析程序性能瓶颈。
最低0.47元/天 解锁文章
1476

被折叠的 条评论
为什么被折叠?



