Bash: 如何记录执行bash 脚本期间的最高memory/cpu 消耗?

Bash: How to record highest memory/cpu consumption during execution of a bash script?

我在 bash 脚本中有一个函数,它执行一个名为 runBatch 的长进程。基本上 runBatch 将文件作为参数并将内容加载到数据库中。 (runBatch 只是加载文件内容的数据库命令的包装函数)

我的函数有一个类似于下图的循环,我正在其中记录变量过程的开始时间和经过时间。

for batchFile in `ls $batchFilesDir`
do
     echo "Batch file is $batchFile"  
     START_TIME=$(($(date +%s%N)/1000000))
     runBatch $batchFile
     ELAPSED_TIME=$(($(($(date +%s%N)/1000000))-START_TIME))
     IN_SECONDS=$(awk "BEGIN {printf \"%.2f\",${ELAPSED_TIME}/1000}")
done

然后我在生成的 html 页面中将每个批次的一些信息(例如时间等)写入 table。

当 runBatch 为 运行 时,我将如何记录最高 memory/cpu 使用率 ,以及时间等?

感谢任何帮助。

编辑:我设法完成了这项工作。我围绕这个脚本添加了一个包装脚本,它在后台运行这个脚本。我用 $! 传递它的 PID!到包装器脚本中的另一个脚本,该脚本每秒监视进程 CPU 和内存使用情况。当 PID 不再存在时,我将所有内容编译到最后的 html 页面中。指点一下。

您应该可以使用 $! 获取进程的 PID,

runBatch $batchFile &
myPID=$!

然后您可以 运行 a top -b -p $myPID 打印出 CPU.

的滴答摘要

内存:

cat /proc/meminfo 

接下来随便grep,

Cpu,比较复杂-/proc/stat expained

平均负载:[​​=15=]

cat /proc/loadavg

时间"runBatch"使用

time runBatch 

喜欢

time sleep 10

获得进程的 pid 后(例如 ) you can use (with watch(1) & cat(1) or grep(1)) the proc(5) 文件系统,例如

 watch cat /proc/$myPID/stat

(或使用 /proc/$myPID/status/proc/$myPID/statm,或 /proc/$myPID/maps 作为地址 space,等等...)

顺便说一句,对于 运行 批处理作业,您应该定期考虑 batch (and you might look into crontab(5) 到 运行 事情)