非常に短いプロセスの最大メモリ使用量の決定

非常に短いプロセスの最大メモリ使用量の決定

プログラムをテストしていますが、プロセスで使用されている最大メモリを確認する必要があります。私は一般的にこれが ps -aux 私にこの情報を提供できることを知っていますが、プロセスは1/10秒未満で実行されるため、psキャプチャを許可するのは良いオプションではありません。

この種の情報を得るためのその他の良いオプションはありますか?メモリ使用量を向上させることができるかどうかを確認するために、プログラムはいくつかのベンチマークを実行しています。

答え1

valgrindメモリ使用量に関する他の多くの統計とともに、この情報を提供します(そしてメモリリークなどについて教えてください)。プログラムは少し遅くなりますが、プロセスの寿命が短いため問題ありません。

以下は実行のサンプル出力ですls

==7051== 
==7051== HEAP SUMMARY:
==7051==     in use at exit: 351,689 bytes in 838 blocks
==7051==   total heap usage: 1,049 allocs, 211 frees, 688,325 bytes allocated
==7051== 
==7051== LEAK SUMMARY:
==7051==    definitely lost: 0 bytes in 0 blocks
==7051==    indirectly lost: 0 bytes in 0 blocks
==7051==      possibly lost: 0 bytes in 0 blocks
==7051==    still reachable: 351,689 bytes in 838 blocks
==7051==         suppressed: 0 bytes in 0 blocks
==7051== Rerun with --leak-check=full to see details of leaked memory
==7051== 
==7051== For counts of detected and suppressed errors, rerun with: -v
==7051== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

探している特定の情報は、「合計ヒープ使用量」行で提供されます。

答え2

使用GNU時間(Bashに組み込まれている「時間」よりも多くの機能があります):

$ sudo apt-get install time
$ \time prog >/dev/null 
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 2380maxresident)k
0inputs+0outputs (0major+119minor)pagefaults 0swaps

\time明示的なクエリのエスケープいいえ内蔵のものを使用すること/usr/bin/timeもできます。他にも様々な表示方法がありますので「マンタイム」をご利用ください。

答え3

これは古いスレッドですが、短期実行プロセスのメモリ要件も確認する必要があるときに偶然発見されました。

私はいくつかの調査をしましたが、許可された答えが正しいとは思えません。 OPと私はいつでもプログラムが使用する最大メモリ量、つまり最大メモリ要件を見つけようとしています。

valgrindのメトリックはtotal heap usageこれを測定しませんが、実行中のすべての割り当ての合計を測定します。したがって、ループが100回の繰り返しに対して1 MBを割り当てて解放する場合、total heap usage最大メモリ要件が1 MBに過ぎても、メトリックに100 MBが寄与することになります。

Valgrindには、Massif-Visualizerツールを使用して可視化できるプログラムの最大メモリ要件を見つけるために使用できるMassifというツールが含まれています。

valgrind --tool=massif ./<your program>

massif-visualizer massif.out.<num>

このツールは、時間の経過とともに合計ヒープ使用量を表示し、プログラムの正しい最大ヒープ要件を決定します。この処理については後述する。詳しくはこちら

関連情報