プロセスツリーとは、プロセスとそれが何らかの方法で実行されるすべてを意味します。
私はそれを試しましたが、/usr/bin/time -v
完全に間違っていることがわかりました。たとえば、npm test
14GiBの空き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