Linux でプロセスをベンチマークするにはどうすればよいですか? 特定のプロセス名に「top」と「time」のようなものが必要ですか (これはマルチプロセス プログラムなので、多くの PID が与えられます)。
さらに、最終的な数値だけでなく、これらのプロセスのメモリと CPU 使用率の経時的なプロットが必要です。
何か案は?
Linux でプロセスをベンチマークするにはどうすればよいですか? 特定のプロセス名に「top」と「time」のようなものが必要ですか (これはマルチプロセス プログラムなので、多くの PID が与えられます)。
さらに、最終的な数値だけでなく、これらのプロセスのメモリと CPU 使用率の経時的なプロットが必要です。
何か案は?
私は通常、この種の作業用に簡単なスクリプトをまとめます。
proc ファイルシステムのカーネル ドキュメント (Google 'linux proc.txt') を参照してください。
/proc/stat
(proc.txt のセクション 1.8)の最初の行は、累積的な CPU 使用状況の統計 (つまり、ユーザー、ナイス、システム、アイドルなど) を提供します。各プロセスについて、ファイル/proc/$PID/stat
(proc.txt の表 1-4) は、プロセス固有の CPU 使用率統計とメモリ使用率統計 (rss を参照) の両方を提供します。
少しグーグルで検索すると、これらのファイルに関する詳細な情報と、必要な値を取得/導出するのに役立つライブラリ/アプリ/コード スニペットへのポインターが見つかります。それを念頭に置いて、私は高レベルの戦略に焦点を当てます.
CPU 統計については、お気に入りのスクリプト言語を使用して、監視用の一連のプロセス ID を取得する実行可能ファイルを作成します。一定間隔 (例: 1 秒) で、各プロセスおよびシステム全体の累積合計をポーリング/計算します。各ポーリング間隔で、すべての結果を 1 行で stdout に書き込みます。
メモリ統計については、同様のスクリプトを記述しますが、プロセスごとのメモリ使用量を記録するだけです。瞬時値を直接取得するため、メモリは少し簡単です。
テスト中にこれらのスクリプトを実行し、監視する一連のプロセス ID を渡し、その出力をログ ファイルにリダイレクトします。
./logcpu $(pidof foo) $(pidof bar) > cpustats
./logmem $(pidof foo) $(pidof bar) > memstats
これらのファイルの内容をスプレッドシートにインポートします (特定のアプリケーションでは、これはコピー/貼り付けと同じくらい簡単です)。CPU の場合、瞬時値を求めていますが、累積値があるため、これらの値を導出するには、スプレッドシートでちょっとした作業を行う必要があります (デルタ 't(x + 1) - t(x)' だけです)。もちろん、CPU ロガーにデルタを書き込むこともできますが、スクリプトの前にもう少し時間を費やすことになります。
最後に、スプレッドシートを使用して素敵なプロットを生成します。
以下は、Linux システムを監視するためのツールです。
top
、free -m
、vmstat
、iostat
、iotop
、などのシステム コマンド。問題をデバッグしているときにsar
、netstat
これらの Linux ユーティリティに近づくものはありません。これらのコマンドを使用すると、サーバー内の状況を明確に把握できます