プロセスのメモリ使用量は、以下を実行することで表示できます。
$ ps -C processname -o size
SIZE
3808
ps実行(または外部プログラム)や読み取りを行わずにこの情報を取得する方法はあります/procか?
プロセスのメモリ使用量は、以下を実行することで表示できます。
$ ps -C processname -o size
SIZE
3808
ps実行(または外部プログラム)や読み取りを行わずにこの情報を取得する方法はあります/procか?
Linux システムでは、プロセスのメモリ使用量は を読み取ることで照会できます/proc/[pid]/statm。[pid]プロセスの PID はどこにありますか。プロセスが自身のデータを照会したい場合は、代わりに読み取ることで実行できます/proc/self/statm。man 5 proc言います:
/proc/[pid]/statm
Provides information about memory usage, measured in pages. The columns are: size total program size (same as VmSize in /proc/[pid]/status) resident resident set size (same as VmRSS in /proc/[pid]/status) share shared pages (from shared mappings) text text (code) lib library (unused in Linux 2.6) data data + stack dt dirty pages (unused in Linux 2.6)
でファイルを開きfopen("/proc/self/statm", "r")、内容を読むことができます。
ファイルは「ページ」で結果を返すため、ページ サイズも確認する必要があります。getpagesize ()ページのサイズをバイト単位で返します。
プログラムのメモリ使用量を見つけるには、いくつかのオプションがあります。
ps、top、またはpmapコマンド ラインから行うようにpsをアプリにバンドルして直接使用します (もちろんオープンソースです!)/procこれですべてです...)ps/procビューにすぎないため、これは実際には既に行われています。前者はすべてシステム管理の観点から教育的であり、実際の状況では最良の選択肢ですが、最後の箇条書きはおそらく最も興味深いものです。おそらく、Valgrind または memprof のソースを読んで動作を確認したいと思うでしょうが、基本的に必要なことは、アプリとカーネルの間にメカニズムを挿入し、メモリ割り当ての要求をインターセプトすることです。さらに、プロセスの開始時に、そのメモリ空間を 0xDEADBEEF などのプリセット値で初期化する必要があります。次に、プロセスが終了した後、メモリ空間を読み込んで、事前に設定した値以外の単語の出現回数を数えることで、メモリ使用量の見積もりを得ることができます。
もちろん、物事は常に見かけよりも複雑です。共有ライブラリが使用するメモリはどうですか? パイプ?プロセスと別のプロセスの間でメモリを共有していますか? システムコール?割り当てられたが使用されていない仮想メモリ? ディスクにバッファリングされたデータ? あなたの質問「プロセスの記憶」を超えて、多くの呼び出しが行われます。その他の懸念事項については、この投稿を参照してください。