存続期間中にUnixプロセスの最大仮想セットサイズを取得するには?

存続期間中にUnixプロセスの最大仮想セットサイズを取得するには?

このコマンドには、Linuxのマニュアルページに従って、次の目的で使用されるtimeフォーマットパラメータ「M」が含まれています。time

Maximum resident set size of the process during its lifetime, in Kilobytes.

timeただし、プロセスの存続期間中にプロセスの最大仮想セットサイズを測定できないようです。 Linuxでどのようにこれを達成できますか?

明らかに、プロファイリング中のプロセスに対する制御権があるため、実行の終わりにこの子プロセスが終了する準備ができていることを示す信号をエクスポートする必要がある場合は、親がそのVSZを読み取って終了できpsますpmap。親プロセスがメモリを読み取った後、子プロセスを明示的に終了します。これを行うことはできますが、痛いので、プロファイリングされているプログラムコードを検出しないより簡単な解決策があるかもしれません。最大値を測定するなど、仮想timeセットサイズと直接等価であるのが理想的です。ただし、必要に応じてサブプロセスを開始するカスタム C プログラムを作成できます。ただし、Cパスに進むと、サブプロセスでVSZのカーネルトレースを有効にするためにどのシステムコールが使用されるかはわかりません。

どんな指針でも大変感謝いたします。

編集:これは些細なことではないことがわかりました。考えられる解決策は次のとおりです。https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process/10957355#10957355

ベストアンサー1

これがあなたに役立つかもしれませんが、pidstat -r 1 -p 1/sbin/initの例は次のとおりです。

10:53:38          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
10:53:39            1      0.00      0.00   13648   1108   0.01  init
10:53:40            1      0.00      0.00   13648   1108   0.01  init
10:53:41            1      0.00      0.00   13648   1108   0.01  init
10:53:42            1      0.00      0.00   13648   1108   0.01  init
10:53:43            1      0.00      0.00   13648   1108   0.01  init
10:53:44            1      0.00      0.00   13648   1108   0.01  init

おすすめ記事