基准测试一个Linux Bash脚本

9
有没有办法测试bash脚本的性能呢?该脚本下载一个远程文件,然后调用多个命令行程序来进行操作。我想知道以下信息(或尽可能多的信息):
- 总时间 - 下载所花费的时间 - 每个命令调用所花费的时间 - -=【我认为这些可以使用"time"调用包装一下吧?】=- - 平均下载速度 - 使用wget - 使用的总内存 - 总CPU使用率 - 每个命令调用的CPU使用率
我能够编辑bash脚本,在特定点插入任何需要的基准测试命令(例如,在应用程序调用之间)。不确定是否可以通过某些“top”技巧解决这个问题。在man文件中无法找到有用的东西(至少对我的理解而言)。将在OSX终端和Ubuntu上运行基准测试(如果有区别的话)。

这种事情偶尔会被讨论,有一些合理的答案(除了供应商包或咨询时间外,没有自动化的东西)。尝试查找标签为benchmark/ing和tag=testing的消息。祝你好运。 - shellter
你关于将总时间包装在时间调用中是正确的,至于平均下载速度,获取文件大小,然后将其除以下载所花费的时间得出一个通用结果。内存和CPU使用情况也可以通过各种调用来检索。这里有一些关于使用/proc/stat进行使用情况的内容。http://colby.id.au/node/39 - a sandwhich
由于 bash基准测试命令 重定向到此处。我认为值得提一下 hyperfine - Ulysse BN
2个回答

20
strace -o trace -c -Ttt ./scrip
  1. -c选项用于跟踪CPU在特定调用上花费的时间。
  2. -Ttt选项将告诉您每个系统调用运行时的微秒时间。
  3. -o选项将把输出保存在文件"trace"中。

这是否包括网络连接时间?在我的情况下,我正在尝试获取关于“git checkout”的统计数据,但报告的总时间似乎少于十分之一秒,而实际上该命令忙碌了更长的时间(约3分钟)。 - ThorSummoner
1
不确定,但你可以通过它所调用的系统调用来获取那个想法。 - Farhan

4
您应该可以通过多种方式来实现此目标。其中一种方法是针对每个感兴趣的命令使用内置函数time并捕获结果。您可能需要注意任何管道和重定向;
您还可以考虑捕获SIGCHLD、DEBUG、RETURN、ERR和EXIT信号,并在其中放置时间信息,但您可能无法获得某些结果。
每个命令的CPU使用情况的概念不会给您任何有用的东西,所有命令都使用100%的CPU。内存使用情况是您可以提取的内容,但您应该查看
如果您想获取深入的进程统计信息,则需要使用strace…请参阅strace(1)手册以了解详细信息。我怀疑-Ttt,因为它在其他地方被建议是有用的,但它只告诉您系统调用时间,而您需要其他进程跟踪信息。
您还可以查看ltrace和dstat工具。
类似的问题在这里回答:Linux基准测试工具

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接