在编程语言中,我通常会通过循环几千次来测量相对较快(<1 秒完成)的性能,然后获得每次完成的平均时间。
我将如何在 bash 中做同样的事情来比较两个非常快速的命令的执行性能?
最好使用类似time命令的东西。
Bash 也有一个time内置的,我建议使用time位于以下位置的二进制文件:/usr/bin/time。
对于一个运行时:
command time -f "\nElapsed: %E \nUser: %U \nSystem: %S \nMemory: %M\n" \
./MyCommand 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
哪些输出:
Elapsed: 0:00.01
User: 0.00
System: 0.00
Memory: 2412
Run Code Online (Sandbox Code Playgroud)
command: 强制使用 bash/usr/bin/time而不是time内置的。您可以使用time循环来获取特定资源的“平均”、“最小”、“最大”,比如内存:
此代码将运行./COMMAND命令 1000 次,然后打印出其总(数据+堆栈+文本)内存使用量的“最小值、最大值、平均值”。
#!/bin/bash
tmpfile=`mktemp`
for i in {1..1000}; do command time -ao $tmpfile -f "%K" ./COMMAND 1>/dev/null; done;
awk 'NR == 1 {min = $0} $0 > max {max = $0} {total += $0} END {print total/NR, min, max}' $tmpfile
rm $tmpfile
Run Code Online (Sandbox Code Playgroud)
这是输出:
2436.89 2524 2324
Run Code Online (Sandbox Code Playgroud)
你可以改变%K:
%E: 经过实时%I: 文件输入数%P:此作业获得的 CPU 的百分比%k: 传递给进程的信号数%U: 用户模式下的CPU使用率%S: 内核模式下的 CPU 使用率看 man time
感谢 muru 写了一个更清晰的awk声明。
| 归档时间: |
|
| 查看次数: |
4217 次 |
| 最近记录: |