スクリプト(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で行われました(したがって、mmap
&munmap
および他の使用方法を理解できます)システムコール(2))またはメモリ(仮想アドレス空間など)に関連するシステムコールにのみインポートを制限strace
できます。-e trace=%memory
-e trace=memory
さて、メモリ割り当ての追跡Python関数も役に立ちます。
そうかもしれないと思います。あなたただ仮想に興味を持ってメモリこれは、PythonインタプリタがPythonスクリプトを実行するために使用する仮想アドレス空間(RAMではない)に関するものです。これはプロセスの実行中に変更されます。実際には、RSS(または仮想アドレス空間の最大ピークサイズ)がより便利です。
また、見ることができますLinuxAteMyRAM。