我的问题

我的问题

我的问题

我需要找出我编写的 bash 脚本需要多少资源。我主要对以下内容感兴趣:

  • 内存

  • 磁盘使用峰值(磁盘空间)

  • CPU时间:虽然在这里我不确定这到底指的是整个CPU(包括物理+虚拟核心?)的执行时间还是仅指所使用的核心的执行时间。例如,我如何知道具有不同核心数量的 CPU 需要多少 CPU 时间?

  • 使用的核心数

这样做的原因是,我将向集群提交作业。每个作业都使用稍微更改的参数来执行我的脚本。

我的计划如下,我在我的电脑上执行脚本以获取上述资源的峰值,然后确保仅使用已准备好所需资源量的集群节点。

或者更好的是在脚本执行期间我将所需的内容写入某个文件。

尝试的解决方案

到目前为止我做了什么:

RAM:测量脚本中被调用程序的峰值 RAM,从中我猜测它具有最大 RAM 使用量。 (这是一个脚本,我在其中使用了后来从日志文件中提取的Mathematica命令)MaxMemoryUsed[]

磁盘空间:我基本上使用du -sb.而且,我还在df脚本之前和之后使用。

CPU 时间:在我设置的脚本的开头SECONDS=0echo ${SECONDS}结尾(因为脚本是我运行的唯一内容,所以这应该对应于 CPU 时间?!)。我也曾经date粗略地估计过。

我感谢所有针对我的问题的提示、评论和工具以及可能的解决方案。

编辑

我也听说过valgrind。有没有人有这方面的经验。可以将其用于我的目的吗?

答案1

您可以通过在 GNU 中运行命令来完成此操作time。默认情况下,时间显示real(挂钟)、user(用户模式中使用的 CPU 秒)和sys(内核模式中使用的 CPU 秒)数据项。但是,您还可以要求它测量其他内容,例如 RAM 和磁盘使用情况:

/usr/bin/time -f "File system outputs: %O\nMaximum RSS size: %M\nCPU percentage used: %P" <command>

其中<command>替换为您要运行的命令。输出将类似于:

File system outputs: 18992
Maximum RSS size: 40056
CPU percentage used: 367%

其中“CPU 使用百分比”是一个百分比,显示使用了 3.6 个核心,“最大 RSS 大小”与“使用的最大内存”最接近,以千字节为单位表示,“文件系统输出”以千字节为单位表示操作数(即,它没有说明写入了多少数据)。您给出的dudf命令应该有帮助。

注:你需要使用/usr/bin/time而不是仅仅使用time,因为许多 shell 都将其作为内置选项,但不一定支持该-f选项。

有关更多信息,请参阅man time

相关内容