49936


linux環境を対象とした質問です。

自分のプログラムの実行時に使用されているメモリの使用量を確認しようとしました。  
結果としては、なぜか実行毎にメモリサイズが変化しているかのような結果になりました。  
測定方法としてプログラムにユーザの入力待受処理をさせて、待受中にpsコマンドを使用しRSS欄の値を参照する方法をとりました。

以下が質問です。  
1.そもそも、psコマンドのRSSの値を見て実行時のメモリ使用量を図る方法は妥当であるか。  
2.なぜ、同じプログラムでも実行毎にメモリサイズ(RSS欄の値)が違うのか。  
3.例えば一回だけhello
woldと表示して終了するだけのプログラムのような、一瞬で処理が終了するプログラムの場合にメモリがどのぐらい使用されたかを確認する方法が知りたいです。

ご教示お願い致します。


CC BY-SA 4.0
2018-11-03T02:38:52.357
49915
2018-11-03T12:21:29.157
30707
question
linux
プログラム実行時に確保されるメモリの測定方法について


  1. `ps`実行時点(スナップショット)のメモリ使用量を図る方法としてはほぼ妥当と考えます。  
プロセスが使用したメモリ最大値を知りたいのであれば、「`/proc/<PID>/status`」の「`VmHWM`」の値を確認する方がよいと思います。(あるいは「`VmRSS`」)

  2. 実行毎にメモリサイズが異なる理由はよくわかりませんが、前述のように`ps`の実行タイミングで異なってみえている可能性はあります。

  3. あまり楽な方法ではないですが、すぐに終了するプログラムのメモリ使用量を計測するなら「`Valgrind`」の「`messif`」を用いる方法があります。(参考: [Valgrind を使ったアプリケーションのメモリー使用量のプロファイリング](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-memory-monitoring_and_diagnosing_performance_problems#sect-Red_Hat_Enterprise_Linux-Performance_Tuning_Guide-Monitoring_and_diagnosing_performance_problems-Profiling_application_memory_usage_with_Valgrind)
[code]         valgrind --tool=messif 計測したいプログラム

    
[/code]

＃ただし、実行時間がかかります。(使用したことはないのでどの程度かはわかりません)


CC BY-SA 4.0
2018-11-03T12:21:29.157
49936
2018-11-03T12:21:29.157
20098
49915
answer