time 计时是什么
time 给出命令的三项耗时:真实经过的时间、用户态消耗的 CPU 时间、内核态消耗的 CPU 时间。判断性能瓶颈时这三者的关系比绝对值更有用——真实耗时远大于两项 CPU 之和,说明时间花在等待 IO、网络或锁上;两项之和接近真实耗时,说明是计算密集型。用独立的详细版本加展开选项,还能看到最大内存占用、缺页、上下文切换等细节,比手工计时信息量大得多。
基本信息
| 适用平台 | GNU/Linux、macOS(需区分内建关键字与独立程序) |
|---|---|
| 两种形态 | shell 内建关键字、独立可执行程序 |
| 语法 | time 命令;独立版本加 -v 展开详情 |
| 常用选项 | -v 展开资源使用、-o 写入文件、-f 自定义格式 |
| 输出目标 | 两种版本都写到标准错误 |
| 关键指标 | 真实耗时、用户态时间、内核态时间 |
典型使用场景
- 判断命令变慢是计算密集还是等待 IO。
- 对比优化前后同一命令的耗时与资源消耗。
- 评估脚本的资源需求,为容量规划提供依据。
- 排查多线程程序的实际并行度是否达到预期。
- 给性能测试留档:记录耗时、内存峰值与缺页情况。
常用写法
常用写法
time rsync -a /data/ /backup/ # 内建版本,看三项耗时
time (sleep 1; echo done) # 对复合命令计时
/usr/bin/time -f '%e 秒 %M KB' ./batch-job.sh # 自定义输出格式
/usr/bin/time -v ./app 2> /tmp/time.log # 详细报告落盘
grep -E 'Elapsed|Maximum resident|page faults|context switches' /tmp/time.log
for i in 1 2 3; do time curl -sS -o /dev/null http://10.0.0.5/health; done # 多次取稳定值
/usr/bin/time -v tar czf app.tar.gz /opt/app 2>&1 | grep Elapsed指标读法
| 指标 | 含义 | 判断要点 |
|---|---|---|
| 真实耗时 | 墙上时钟经过的时间 | 用户实际感知的耗时 |
| 用户态时间 | 用户态消耗的 CPU | 计算量指标 |
| 内核态时间 | 内核态消耗的 CPU | 系统调用与内存管理开销 |
| 两者之和远小于真实耗时 | 大量时间在等待 | 指向 IO、网络、锁等待 |
| 最大常驻内存 | 进程内存峰值 | 评估内存需求 |
| 缺页与上下文切换 | 额外开销细节 | 频繁切换说明调度或锁竞争严重 |
shell 内建版本与独立可执行版本的参数不同:想要详细报告必须调用独立版本,很多精简系统默认没装,需要先安装对应软件包。
多线程或多进程时用户态时间可以远超真实耗时,这是并行的正常表现;用它估算并行度,而不是把三项相加当作总耗时。
计时输出走标准错误:在管道里直接接下游会把耗时信息丢掉,需要显式重定向到标准输出或文件。