プログラムの実行中にどれだけのRAMを使用しているかを知らせるUnixコマンドは何ですか? [コピー]

プログラムの実行中にどれだけのRAMを使用しているかを知らせるUnixコマンドは何ですか? [コピー]

スクリプト(Pythonなど)を実行しているとしましょう。プログラムがどれくらいかかったかを調べるには、次の手順を実行します。

time python script1.py

スクリプトの実行中にどのくらいのRAMを使用しているかを追跡するためのコマンドはありますか?使用可能なRAM容量を確認するには使用できますが、freeこのコマンドは上記の操作には適していません。

ベストアンサー1

これ時間(1)コマンド(timeパッケージとしてインストールする必要があるかもしれません/usr/bin/time)は、理解できる形式文字列を含む多くの引数を受け入れます(-fまたは使用--format)。

  %M     Maximum resident set size of the process during its lifetime,
          in Kbytes.
  %K     Average total (data+stack+text) memory use of the process, in
          Kbytes.

/usr/bin/timeこのコマンドを以下と組み合わせないでください。time バッシュ内蔵。フルファイルパスを入力する必要があります/usr/bin/time(シェルで実行するように要求する場合)。注文する内蔵されていません)またはタイプcommand timeまたは\time(ありがとうトビースペート&到着彼らのコメントを聞いてください)。

試してみることができます(RSSは常駐セットサイズ)

/usr/bin/time -f "mem=%K RSS=%M elapsed=%E cpu.sys=%S user=%U" python script1.py

また試すことができます

/usr/bin/time --verbose  python script1.py

質問された内容は次のとおりです。

スクリプトの実行中にどのくらいのRAMが使用されますか?

これはあなたが誤解していることを示します。 Linux(または最新のマルチプロセスオペレーティングシステム)で実行されているアプリケーションは、次のものを使用します。仮想メモリとそれぞれプロセスpythonスクリプトを実行するプロセスを含む)自体仮想アドレス空間プロセスが実行されていませんまっすぐ存在する物理RAMですが、独自の仮想アドレス空間があります(そしてその中で実行)カーネルは複雑な方法で仮想メモリを実装します。ページング要求怠惰を利用する書き込み中のコピー技術と構成メモリ管理ユニット。これメモリ使用および管理される物理デバイスおよびリソース。内部仮想メモリはカーネルによって実装されています(参照:ページキャッシュそして薬勝つ)。

数日間、もっと詳しく知りたいと思うかもしれません。オペレーティングシステム。私は読書をお勧めしますオペレーティングシステム:3つの簡単な部分無料でダウンロードできる本です。 RAMはオペレーティングシステム全体で使用され(個々のプロセスでは直接使用されません)、特定のプロセスRAMの実際のページは時間の経過とともに変更される可能性があります(そして他のプロセスとは何らかの方法で共有されます)。したがって、特定のプロセスのRAM消費は絶えず変化するため(平均値や最高値などが必要になる場合があります)、明確に定義されておらず、仮想アドレス空間のサイズも同じです。

以下を使用することもできます(特にスクリプトが数秒間実行される場合)。タワー(1)ユーティリティ(他の端末にある場合もあります)または参考(1)またはマッピング(1)- たぶん使用する地図時計(1)コマンドを繰り返しpsますpmap。直接使用することもできます/proc/(参照工程(5)...) おそらく、watch cat /proc/$(pidof python)/statusまたは/proc/$(pidof python)/stat/proc/$(pidof python)/maps...

しかし、メモリ使用量(一部のプロセスのカーネルによって)はい広く時間とともに変化特定のプロセスに対して(仮想アドレス空間も変更されます。たとえば、呼び出しを介して)マッピング(2)そしてmunmap使用されるld-Linux(8)ドロペン(3)割り当て(3)freeとPythonインタプリタに必要な他の多くの機能...)。

また、使用することができますトラック(1)理解するシステムコールスクリプトはPythonで行われました(したがって、mmapmunmapおよび他の使用方法を理解できます)システムコール(2))またはメモリ(仮想アドレス空間など)に関連するシステムコールにのみインポートを制限straceできます。-e trace=%memory-e trace=memory

さて、メモリ割り当ての追跡Python関数も役に立ちます。

そうかもしれないと思います。あなたただ仮想に興味を持ってメモリこれは、PythonインタプリタがPythonスクリプトを実行するために使用する仮想アドレス空間(RAMではない)に関するものです。これはプロセスの実行中に変更されます。実際には、RSS(または仮想アドレス空間の最大ピークサイズ)がより便利です。

また、見ることができますLinuxAteMyRAM

おすすめ記事