解決策 1:
特定のプロセスのピーク時のメモリ使用量は、次の場所で取得できます:
grep VmPeak /proc/$PID/status
($PID を探している実際のプロセス ID に変更します)。
VmPeak は、プロセスが開始されてからプロセスが使用したメモリの最大量です。
プロセスのメモリ使用量を経時的に追跡するには、munin と呼ばれるツールを使用して追跡し、経時的なメモリ使用量の優れたグラフを表示できます。
Munin には、システム リソースを追跡するための多くのデフォルト プラグインが付属していますが、ピーク時のメモリ使用量を追跡するためのプラグインは付属していません。幸いなことに、プラグインを作成するのは非常に簡単です。
apache プロセスの VmPeak、VmRSS、および VmSize メモリ使用量を追跡する munin プラグインの例を次に示します。これは必要に応じて変更できます (適切な PID ファイルをポイントし、必要に応じてコンポーネント名を変更するだけです)。
出力されるグラフは次のようになります (この例では VmPeak と VmSize は同じであるため、そのうちの 1 つだけが表示されます):
注: これはメインの apache プロセスのみを監視し、その子プロセスのメモリ使用量は表示しません。
#!/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
解決策 2:
プロセスの開始時に使用できるツールがあり、プロセスが終了するとメモリ使用量の概要が表示されます:
- ミームタイム
- tstime
GNU 時間 -v オプションを付けて実行した場合のピークメモリ使用量も示します。 bash には time という組み込みコマンドもあるため、起動時に GNU time へのフル パスを指定する必要がある場合があります (例:/usr/bin/time -v command)。 .さらに、古いバージョンの GNU time には、結果が誤って 4 倍になるというバグがあることに注意してください。たとえば、次のリンクを確認してください:https://bugzilla.redhat.com/show_bug.cgi?id=702826