UNIX环境下如何获取指定命令执行期间的平均CPU与内存使用率?
UNIX环境下如何获取指定命令执行期间的平均CPU与内存使用率?
看起来你碰到了pgrep的参数使用误区,同时想监控Julia脚本运行期间的CPU和内存平均使用率,我给你几个实用的解决方案:
方法一:修正pgrep的匹配方式,结合pidstat监控
你之前的pgrep报错是因为-f参数只接受一个匹配字符串,但你把命令的多个参数拆成了多个模式传给它,导致冲突。正确的做法是把整个Julia命令行用引号包裹,作为一个完整的匹配模式:
- 先确保你的Julia脚本正在运行(如果没启动就重新运行它),然后用以下命令获取PID:
pgrep -f "julia src/script_etudedtsi.jl 80 20 100 366 5 10 0 1 0 0 1 1"
- 把获取到的PID传给pidstat,同时加上
-r参数监控内存(默认-u只监控CPU),每秒采样一次直到进程结束:
pidstat -u -r -p $(pgrep -f "julia src/script_etudedtsi.jl 80 20 100 366 5 10 0 1 0 0 1 1") 1
进程结束后,pidstat会在输出的最后一行给出平均CPU和内存使用率。
方法二:启动脚本时直接绑定监控,无需手动找PID
这个方法更省心,不需要先找PID,直接在启动脚本的同时启动监控:
# 把Julia脚本后台运行 julia src/script_etudedtsi.jl 80 20 100 366 5 10 0 1 0 0 1 1 & # 获取后台进程的PID PID=$! # 用pidstat持续监控,结果输出到文件(方便后续查看) pidstat -u -r -p $PID 1 > cpu_mem_monitor.txt # 等待脚本执行完成 wait $PID
脚本结束后,打开cpu_mem_monitor.txt,最后一行就是你需要的平均使用率统计。
方法三:无pidstat环境下,用ps+awk手动统计
如果你的系统没有安装pidstat,可以用ps命令定期采样,再用awk计算平均值:
# 后台启动Julia脚本 julia src/script_etudedtsi.jl 80 20 100 366 5 10 0 1 0 0 1 1 & PID=$! # 创建CSV文件保存采样数据 echo "CPU使用率(%),内存使用率(%)" > cpu_mem_stats.csv # 循环采样直到进程结束 while kill -0 $PID 2>/dev/null; do # 提取进程的CPU和内存使用率,追加到文件 ps -o %cpu,%mem -p $PID | tail -n1 >> cpu_mem_stats.csv # 每秒采样一次 sleep 1 done # 用awk计算平均值 awk 'NR>1 {cpu_sum+=$1; mem_sum+=$2; count++} END {print "平均使用率: " cpu_sum/count "% CPU, " mem_sum/count "% 内存"}' cpu_mem_stats.csv
补充说明
- pidstat是sysstat工具包的一部分,如果没安装可以用包管理器安装(比如
apt install sysstat或yum install sysstat)。 - 只要持续监控到进程终止,pidstat默认会自动输出最终的平均值,无需额外参数。
备注:内容来源于stack exchange,提问作者JKHA
相关产品推荐
相关产品推荐

