Bash:如何在执行bash脚本期间记录最高内存/ CPU消耗?

时间:2015-01-29 12:37:23

标签: linux bash shell

我在bash脚本中有一个函数,它执行一个名为runBatch的长进程。基本上,runBatch将文件作为参数并将内容加载到db中。 (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页面中的表格。

如何在runBatch运行时记录最高内存/ CPU使用率 ,以及时间等?

任何帮助表示感谢。

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

3 个答案:

答案 0 :(得分:3)

您应该能够使用$!,

获取流程的PID
runBatch $batchFile &
myPID=$!

然后您可以运行top -b -p $myPID打印出CPU的滴答摘要。

答案 1 :(得分:3)

内存:

cat /proc/meminfo 

接下来grep你想要什么,

Cpu,它更复杂 - /proc/stat expained

平均负荷:

cat /proc/loadavg

用于计时" runBatch"使用

time runBatch 

喜欢

time sleep 10

答案 2 :(得分:2)

一旦您获得了流程的pid(例如answered here),您就可以{使用watch(1)& cat(1)grep(1)){ {3}}文件系统,例如

 watch cat /proc/$myPID/stat

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

顺便说一句,要运行批量作业,您应该考虑proc(5)(您可能会考虑batch定期运行)