私の質問
私が書いているbashスクリプトにどれだけのリソースが必要かを調べる必要があります。私は主に以下に興味があります:
メモリ
最大ディスク使用量(ディスク容量)
CPU時間:ここでは、これがCPU全体(物理+仮想コアを含む)の実行時間を意味するのか、それとも使用されたコアの実行時間のみを意味するのかはわかりません。たとえば、コア数が異なるCPUに必要なCPU時間をどのように知ることができますか?
使用されたコア数
その理由は、クラスタにジョブを送信するからです。各ジョブは、わずかに変更されたパラメーターを使用してスクリプトを実行します。
私の計画は次のとおりです。マイコンピュータでスクリプトを実行して上記のリソースの急増を取得し、必要な量のリソースが準備されたクラスタノードのみを使用するようにします。
あるいは、スクリプトの実行中に必要な内容をいくつかのファイルに書き込むことをお勧めします。
試してみるソリューション
これまで私がしたこと:
RAM:スクリプトから呼び出されたプログラムの最大RAMを測定します。ここで最大RAM使用量があるようです。 (これは後でログファイルから抽出したコマンドを使用したスクリプトですMathematica
。)MaxMemoryUsed[]
ディスク容量:デフォルトではを使用しますdu -sb
。また、df
スクリプトの前後に使用します。
CPU時間:私が設定したスクリプトの始まりSECONDS=0
と終わりecho ${SECONDS}
(スクリプトが私が実行する唯一のタスクなので、CPU時間と一致する必要がありますか?!)。私もdate
おおよその推定をしてみました。
私の問題と考えられる解決策に関するすべてのヒント、コメント、ツールに感謝します。
編集する
私もそのような言葉を聞きましたvalgrind
。誰でもこれの経験がありますか?私の目的に合わせて使用できますか?
答え1
GNUでコマンドを実行するだけですtime
。デフォルトでは、時間にはreal
(壁時計)、user
(ユーザーモードで使用されたCPU時間)、およびsys
(カーネルモードで使用されたCPU時間)データ項目が表示されます。ただし、RAM やディスク使用量などの他の点を測定するよう要求することもできます。
/usr/bin/time -f "File system outputs: %O\nMaximum RSS size: %M\nCPU percentage used: %P" <command>
<command>
実行したいコマンドに置き換えます。出力は次のようになります。
File system outputs: 18992
Maximum RSS size: 40056
CPU percentage used: 367%
ここで、「CPU使用率のパーセンテージ」は使用されたコア3.6個を表すパーセンテージであり、「最大RSSサイズ」はキロバイトで表される「使用された最大メモリ」に最も近く、「ファイルシステム出力」はキロバイトで表されます。単位はオペランド(つまり、どのdu
くらいのデータが記録されるかはわかりません)df
。
注: あなた必要/usr/bin/time
単にuseではなく使用してくださいtime
。多くのシェルはこれを組み込みのオプションとして持っていますが、必ずしもサポートしていないからです-f
。
詳細については、次を参照してください。man time