一部の実行中のプロセスのリソース使用量を監視する最良の方法は何ですか?たとえば、一定期間のCPUとメモリ使用量のログファイルを生成したい場合です。
私が理解したのは、topコマンドまたはpsコマンドの使用、コード内のsysInfoコマンドの使用、/proc/ディレクトリのファイル直接クエリなど、さまざまなオプションがあります。いくつかの方法の長所と短所は明らかですが、例えばpsは平均CPU使用率を示しますが、topはよりすぐになります。質問topにもいくつかの問題があることを指摘しました)、私はまだLinuxに初めて触れているので、何かを見落とし、災いにつながりやすいと思います。
また、top、psを使用したりsysInfoを呼び出すのではなく、/proc/ファイルを直接クエリする方が良いですか?それともこのアプローチはお勧めできませんか?
答え1
これは、スクリプトを使用せずにウォッチを使用して簡単に実行できます。
watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a ログファイル"
ただし、この回答で述べたように、「ps -auxww | grep 'pattern' | wc -l」の代わりに「ps -up PID」(特定のプロセスIDのリソース使用量を表示するには)を使用します。
watchコマンドの更新をより速くまたは遅くするために、「watch -t -n XX」の後にXX番号を変更することもできます(watch -n0,5 = 0.5秒ごとに更新、watch -n10 = 10秒ごとに更新) 。
答え2
もちろん、興味のあるデータとそれを望む理由によって異なります(制限された数の値と比較して、後輩のデバッグ/チューニング目的のおおよその結果を得るために同時に多くを観察する簡単な方法があります)。 )正確なベンチマーク。)
top、htop...などの一般的なユーティリティは、以前の要件に適しています。
ただし、あらかじめ作成された汎用ツールを実行すると、システムがある程度妨げられます。これは、アプリケーションが実行されていないと実際の結果が異なる可能性があることを意味します。
たとえば、次を使用する場合トップ実行中のスレッドがあるCPUを観察すると、頻繁に変更されることがわかります。 top が実行されていない場合は、発生する数がはるかに少なくなります。
後者の必要性については確かにそれを望んでいません。この目的(正確なベンチマーク)のために、次のアイデアを得ることができます(」/proc/に直接問い合わせてみてください。”)は本当にお金で買える最高のものです。
A/man proc
興味のある情報を含む /proc ディレクトリツリーでファイルを探すには (少ないほど良い)
B/ 単純なシェルスクリプトがあります:
- このファイルを/ tmpファイルに追加します(grepしないでください)。
- しばらく寝てください(高いほど良いです)
- ファイルを再キャプチャし、結果を/ tmpファイルに追加します。
C /は一般的なワークロードを開始し、すべてのコンソールでスクリプトを開始します。
D / / tmpファイルをスプレッドシートにインポートし、微積分学に触れてください。
もちろん、何十ものCPUだけがあり、管理のために別々のCPU0がある場合は、最善の方法はコンソールをそのCPUに固定することです。