一个进程的最高内存使用率

topps这样的工具可以为我提供当前分配给进程的内存量,但是我有兴趣测量分配给一个进程的最大内存量,或者是自创build之后,或者是在给定的时间间隔内。 任何build议如何找出?

您可以获得某个进程的峰值内存使用情况,如下所示:

grep VmPeak /proc/$PID/status 

(将$ PID更改为您正在查找的实际进程ID)。

VmPeak是进程自启动以来使用的最大内存量。

为了跟踪一段时间内进程的内存使用情况,可以使用名为munin的工具进行跟踪,并随时显示内存使用情况的良好图表。

Munin提供了许多默认的插件来跟踪系统资源,但是它并没有附带一个插件来跟踪峰值内存的使用情况,因此非常容易为它编写一个插件。

下面是一个munin插件的示例,用于跟踪apache进程的VmPeak,VmRSS和VmSize内存使用情况。 你可以改变这个以适应你的需要(只需指向正确的PID文件并根据需要更改组件名称)。

它输出的图像看起来像这样(VmPeak和VmSize在这个例子中是相同的,所以你只能看到其中的一个):

Apache Memory Usage Graph  - 使用本文中提出的插件生成

注意:这只监视主要的apache进程,并不显示它的subprocess的内存使用情况。

 #!/bin/bash # # Parameters: # # config (required) # autoconf (optional - used by munin-config) # COMPONENT_NAME="Apache" COMPONENT_PID_FILE="/var/run/apache2.pid" if [ "$1" = "autoconf" ]; then if [ -r /proc/stat ]; then echo yes exit 0 else echo "no (/proc/stat not readable)" exit 1 fi fi if [ "$1" = "config" ]; then echo "graph_title $COMPONENT_NAME memory usage" echo 'graph_vlabel' echo "graph_category Processes" echo "graph_info This graph shows the amount of memory used by the $COMPONENT_NAME processes" echo "${COMPONENT_NAME}_vmpeak.label $COMPONENT_NAME VmPeak" echo "${COMPONENT_NAME}_vmsize.label $COMPONENT_NAME VmSize" echo "${COMPONENT_NAME}_vmrss.label $COMPONENT_NAME VmRSS" echo 'graph_args --base 1024' exit 0 fi check_memory () # $1 - PID location # $2 - process_label { pid_location=$1 process_label=$2 read pid < $pid_location procpath="/proc/$pid/status" if [ ! -e $procpath ] || [ -z $pid ] then echo "${process_label}_vmpeak.value 0" echo "${process_label}_vmsize.value 0" echo "${process_label}_vmrss.value 0" exit 0 fi VmPeak=`grep VmPeak /proc/$pid/status|awk '{print $2}'` VmSize=`grep VmSize /proc/$pid/status|awk '{print $2}'` VmRSS=`grep VmRSS /proc/$pid/status|awk '{print $2}'` echo "${process_label}_vmpeak.value $(( $VmPeak * 1024 ))" echo "${process_label}_vmsize.value $(( $VmSize * 1024 ))" echo "${process_label}_vmrss.value $(( $VmRSS * 1024 ))" } check_memory $COMPONENT_PID_FILE $COMPONENT_NAME 

有一些工具可以在启动进程时使用,一旦进程完成,就会给出内存使用情况的摘要:

  • memtime
  • tstime

GNU时间还会在使用-v选项执行时提供峰值内存使用量。 请注意,bash也有一个名为time的内置命令,因此您可能需要在调用它时指定GNU时间的完整path,例如/ usr / bin / time -v命令 。 此外,请注意,旧版本的GNU时间有错误的结果不正确地乘以4,例如,检查以下链接: https : //bugzilla.redhat.com/show_bug.cgi?id = 702826