プロセスツリーの最大メモリ使用量を測定する方法は?

プロセスツリーの最大メモリ使用量を測定する方法は?

プロセスツリーとは、プロセスとそれが何らかの方法で実行されるすべてを意味します。

私はそれを試しましたが、/usr/bin/time -v完全に間違っていることがわかりました。たとえば、npm test14GiBの空きRAMと8GiBの無料スワップでプロジェクトの1つを実行すると、OOMキラーは私のアプリケーション(最も一般的にはブラウザとIDE)を終了し始めます。time報告されたところによると、800MiBしか使用していませんが、実際のメモリ消費量は20GiB以上と非常に高くなければなりません。

答え1

まず、アウトラインを作成するために使用smemできます。smem -tas uss

  • -t...すべて表示
  • -a...列幅の自動調整
  • -s uss...次に基づいて結果を並べ替える空母

pmap各プロセスの詳細を表示するには、スイッチを使用するのが最善です-X。カーネルが提供するすべての情報を取得するには、-XX通常これは過剰です。

2秒リフレッシュモニタリングを受けるPID3120:

watch -n 2 pmap -X 3120

編集:実際に頂点に達するには 上記は監視に役立ちますが、実際のピークは表示されません。忘れてしまいました。

私は個人的にvalgrindこのmassifツールを使います。

valgrind --tool=massif --pages-as-heap=yes --massif-out-file=evolution_massif.out evolution; grep mem_heap_B evolution_massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1

説明する:

  • --page-as-heap=yes...Massifにヒープだけでなくすべてのメモリを占有しなければならないと指示します。
  • --massif-out-file出力ファイル構成ツール
  • 進化...監視する必要があるアプリケーション

次の部分は、最大レコード数を見つけることです。

検索回数grepメモリヒープB発生する。sed -e文字列を削除するmem_heap_Bと、数値結果のみが得られます。汎用数値ソートでソートsort -gし、最大数を取得tail -n 1してソートされた数値の最初の行を返します。

アプリケーションが終了すると、valgrid[B]ytes単位の最大メモリである数字が印刷されます。

メモリピーク記録の確認

出力ファイルの表示進化_massif.outms_print、Massifの後処理ツールを使用できます。

とても簡単です:

ms_print evolution_massif.out

出力は次のようになります(出力の最初のページ)。ここでどのスナップショットが最高かを確認できます。10(ピーク):

--------------------------------------------------------------------------------
Command:            evolution
Massif arguments:   --pages-as-heap=yes --massif-out-file=massif.out
ms_print arguments: massif.out
--------------------------------------------------------------------------------


    GB
10.09^        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #      @:::::@::::::::::::::::@@:::::@:::::@::::::@::::@:::::@::
     |        #      @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::::@:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |     @  #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |  :::@::#::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
   0 +----------------------------------------------------------------------->Gi
     0                                                                   8.927

Number of snapshots: 97
 Detailed snapshots: [7, 10 (peak), 17, 24, 43, 44, 50, 60, 70, 80, 90]

--------------------------------------------------------------------------------
  n        time(i)         total(B)   useful-heap(B) extra-heap(B)    stacks(B)
--------------------------------------------------------------------------------
  0              0           16,384           16,384             0            0
  1    149,772,704      393,547,776      393,547,776             0            0
  2    243,902,287      398,592,800      398,592,800             0            0
  3    396,613,298      558,157,704      558,157,704             0            0
  4    504,752,503      638,138,760      638,138,760             0            0
  5    604,812,936      639,894,808      639,894,808             0            0
...

すべての子供を追加するには編集してください。:

すべての子(子)を追加するには、コマンド--trace-children=yesにこのオプションを追加するだけです。valgrind

関連情報