Ste*_*fan 2 memory disk-usage cpu-usage
我需要找出我编写的 bash 脚本需要多少资源。我主要对以下内容感兴趣:
内存
峰值磁盘使用量(磁盘空间)
CPU 时间:虽然在这里我不确定这究竟是指整个 CPU(包括物理 + 虚拟内核?)或仅使用的内核的执行时间。例如,我如何知道具有不同内核数的 CPU 需要多少 CPU 时间?
使用的核心数
这样做的原因是,我将向集群提交作业。每个作业都使用稍微更改的参数执行我的脚本。
我的计划如下,我在我的电脑上执行脚本以获取上述资源的峰值,然后确保仅使用具有所需资源量的集群节点。
或者甚至在脚本执行期间我将所需的内容写入某个文件更好。
到目前为止我做了什么:
RAM:在我的脚本中测量被调用程序的峰值 RAM,我猜测它具有最大的 RAM 使用量。(这是一个Mathematica脚本,我在其中使用了MaxMemoryUsed[]我后来从日志文件中提取的命令)
磁盘空间:我基本上使用du -sb. 而且,我还使用了df前后脚本。
CPU 时间:在我设置的脚本开始SECONDS=0和echo ${SECONDS}结束时(因为脚本是我唯一运行的,所以它应该对应于 CPU 时间?!)。我也曾经date得到一个粗略的估计。
我感谢所有的提示、评论和指向工具的指针以及我的问题的可能解决方案。
我也听说过valgrind。有没有人有这方面的经验。是否可以将其用于我的目的?
您可以通过在 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>
Run Code Online (Sandbox Code Playgroud)
where<command>替换为您希望运行的命令。输出将类似于:
File system outputs: 18992
Maximum RSS size: 40056
CPU percentage used: 367%
Run Code Online (Sandbox Code Playgroud)
其中“使用的 CPU 百分比”是一个百分比,此处显示使用了 3.6 个内核,“最大 RSS 大小”与“使用的最大内存”非常接近,以千字节表示,“文件系统输出”表示为操作次数(即,它没有说明写入了多少数据)。您给出的du和df命令应该在那里有所帮助。
注意:您需要使用/usr/bin/time而不仅仅是time,因为许多外壳都将它作为内置函数使用,它不一定支持该-f选项。
有关更多信息,请参阅 man time