用于内存和CPU使用的bash脚本

时间:2015-11-11 22:48:08

标签: linux bash shell

我需要编写脚本,该脚本在给定的时间段内返回有关cpu和指定进程的内存使用情况的信息的文件。 当我使用ps -p pid时,我只使用一个cpu核心,当我使用top时,我得到二进制文件作为输出。我试着用下一个:

    while :;
    top -n 1 -p pid | awk '{ print $9" "$10 }'
    sleep 10;
    done

2 个答案:

答案 0 :(得分:0)

内核为您的进程提供的信息位于/ proc文件系统中。主要是您需要解析这两个文件以获取脚本的相关数据

/ proc /(pid)/ status
   的/ proc /(PID)/ STAT

This线程描述了详细获取这些CPU数据所以我不会在这里。

我认为您会发现的问题是,流程的CPU使用率不会分解为系统上可用的各种核心,而是汇总为接近100%*(核心数)的数字。最接近这一点的是顶部的“最后处理器使用”列(选项f,J),但这几乎无法解决您的问题。像this线程中的分析工具可能是最终答案。

我不知道你的环境或要求;但是,解决方案可能只运行机器上隔离的进程,然后收集系统级别的每个核心CPU使用情况,松散地表示流程需求。

答案 1 :(得分:0)

试试这个:

$PID=24748; while true; do CPU=$(ps H -q $PID -eo "pid %cpu %mem" | grep $PID | cut -d " " -f 3 | sed -e 's/$/\+/' | tr -d "\n" | sed -e 's/+$/\n/' | bc) && MEM=$(ps H -q $PID -eo "pid %cpu %mem" | grep $PID | cut -d " " -f 4 | head -n 1) && echo $PID $CPU $MEM && sleep 3; done

它基本上只是将每个线程的CPU%使用率与bc相加,获取指定PID的内存使用量(作为一个整体)并打印它们。