【问题标题】:Benchmark a linux Bash script对 linux Bash 脚本进行基准测试
【发布时间】:2011-11-06 22:06:19
【问题描述】:

有没有办法对 bash 脚本的性能进行基准测试?该脚本下载一个远程文件,然后调用多个命令行程序进行操作。我想知道(或尽可能多):

  • 总时间
    • 下载时间
    • 在每个调用的命令上花费的时间
    • -=[ 我认为这些可以包含在“时间”调用中,对吧? ]=-
  • 平均下载速度
    • 使用 wget
  • 使用的总内存
  • 总 CPU 使用率
    • 每个调用命令的 CPU 使用率

我可以对 bash 脚本进行编辑,以便在特定点(即应用调用之间)插入所需的任何基准测试命令。不确定一些“顶级”忍者是否可以解决这个问题。在 man 文件中找不到任何有用的东西(至少理解有限)。

将在 OSX 终端和 Ubuntu 上运行基准测试(如果有的话)。

【问题讨论】:

  • 这类事情偶尔会得到一些合理的答案(除了供应商 pkgs 或咨询时间 ;-),没有什么是自动的。尝试使用 tag=benchmark/ing 和 tag=testing 查找消息。祝你好运。
  • 你说得对,将总时间包装在时间调用中,至于平均下载速度,获取文件的大小,然后将其放入下载所花费的时间以获得一个一般结果。也可以通过各种调用来检索内存和 cpu 使用情况。这是使用 /proc/stat 进行使用的一些内容。 colby.id.au/node/39

标签: linux bash benchmarking


【解决方案1】:
strace -o trace -c -Ttt ./scrip
  1. -c是跟踪cpu在特定调用上花费的时间。
  2. -Ttt 会在每个系统调用运行时以微秒为单位告诉您时间。
  3. -o 会将输出保存在“trace”文件中。

【讨论】:

  • 这包括花在网络上的时间吗?就我而言,我正在尝试获取有关“git checkout”的统计信息,当命令显然忙了更长的时间(~3m)时,这似乎报告的总时间不到十分之一秒
  • 不确定,但您可以通过它所做的系统调用了解这个想法。
【解决方案2】:

您应该能够通过多种方式实现这一目标。一种方法是对每个感兴趣的命令使用time 内置函数并捕获结果。您可能必须小心任何管道和重定向;

您也可以考虑捕获 SIGCHLD、DEBUG、RETURN、ERR 和 EXIT 信号并将时序信息放入其中,但您可能不会得到一些结果。

每个命令的 CPU 使用率这个概念不会给你任何有用的东西,所有命令都使用 100% 的 cpu。内存使用是你可以拉出来的,但你应该看看

如果您想获得深入的进程统计信息,那么您可能需要使用 strace...有关详细信息,请参阅 strace(1) 手册页。我怀疑 -Ttt 正如在其他地方所建议的那样是否有用,所有这些都告诉您是系统调用时间并且您需要其他进程跟踪信息。

您可能还想查看 ltrace 和 dstat 工具。

这里回答了类似的问题Linux benchmarking tools

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2023-03-13
    相关资源
    最近更新 更多