簡體   English   中英

Bash:如何在執行bash腳本期間記錄最高內存/ CPU消耗?

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

我在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頁面。 歡呼為指針。

你應該能夠使用$!來獲得進程的PID,

runBatch $batchFile &
myPID=$!

然后你可以運行一個top -b -p $myPID來打印出CPU的滴答摘要。

記憶:

cat /proc/meminfo 

接下來grep你想要什么,

Cpu,它更復雜 - / proc / stat expained

平均負載:

cat /proc/loadavg

用於定時“runBatch”使用

time runBatch 

喜歡

time sleep 10

一旦你得到了你的過程的pid(例如像這里回答的那樣),你可以使用(使用watch(1)cat(1)grep(1)proc(5)文件系統,例如

 watch cat /proc/$myPID/stat

(或使用/proc/$myPID/status/proc/$myPID/statm ,或/proc/$myPID/maps作為地址空間等...)

順便說一句,要運行批處理作業,你應該考慮批處理 (你可能會考慮使用crontab(5)定期運行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM