プロセスごとの CPU およびメモリ使用量の追跡
-
09-06-2019 - |
質問
アプリケーションの 1 つが、必要以上に CPU サイクルを消費しているのではないかと思われます。問題は、それがバースト的に発生することです。タスクマネージャーを見ただけでは、即時の使用状況しか表示されないため、役に立ちません。
(Windows 上で) 一部のプロセスの CPU とメモリの使用量の履歴を追跡する方法はありますか。例えば。「Firefox」の追跡を開始すると、1 時間ほど後に、その 1 時間中の CPU とメモリの使用量のグラフが表示されます。
これを実現するための既製のツールまたはプログラムによる方法を探しています。
解決
入力するだけ perfmon
の中へ Start > Run
そしてEnterを押します。[パフォーマンス] ウィンドウが開いたら、+ 記号をクリックしてグラフに新しいカウンターを追加します。カウンタは PC の動作のさまざまな側面であり、類似性によって「パフォーマンス オブジェクト」と呼ばれるグループに分類されます。
質問に対して、「プロセス」、「メモリ」、および「プロセッサ」パフォーマンス オブジェクトを選択できます。これらのカウンターをリアルタイムで確認できるようになります
後で検査するためにパフォーマンス データを保存するユーティリティを指定することもできます。これを行うには、左側のパネルで [パフォーマンス ログとアラート] を選択します。(これは、上記のカウンターを提供するシステム モニター コンソールの直下にあります。存在しない場合は、[ファイル] > [スナップインの追加/削除] をクリックし、[追加] をクリックして、リストから [パフォーマンス ログとアラート] を選択します。) [パフォーマンス ログとアラート] から、新しい監視構成を作成します。 「カウンターログ」の下にあります。次に、カウンターを追加し、サンプリング レート、ログ形式 (バイナリまたはプレーン テキスト)、およびログの場所を指定できます。
他のヒント
プロセスエクスプローラー プロセスごとの履歴グラフだけでなく、プロセスにかかった合計 CPU 時間も表示できます。
perfmon.exe を使用して、メモリ使用量を追跡するために「プロセス」カウンターの下にある「プライベート バイト」カウンターを使用してみましたが、うまく機能しました。
これを使えるかもしれません。これはうまく機能し、指定されたプロセスのプロセッサ時間を報告します。
@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends: typeperf
: Usage: foo.cmd <processname>
set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)
:end
echo Process seems to have terminated.
同意します。perfmon.exe を使用すると、監視したいプロセスのカウンターを追加できます (右側のパネルを右クリック)。
パフォーマンスオブジェクト:プロセス「リストからインスタンスを選択」をチェックし、Firefoxを選択します。
WMI は Windows Management Instrumentation であり、Windows の最新バージョンすべてに組み込まれています。CPU 使用率、ディスク I/O、メモリ使用量などをプログラムで追跡できます。
Perfmon.exe は、このインターフェイスの GUI フロントエンドであり、プロセスを監視し、情報をログに書き込み、事後にログを分析できるようにします。これは世界で最もエレガントなプログラムではありませんが、仕事を成し遂げることができます。
Process Lasso は、グラフではなく、プロセスの自動化と優先クラスの最適化を目的として設計されています。そうは言っても、それは する プロセスごとの CPU 使用率履歴 (グラフ上に白線で描画) が表示されますが、実際には表示されます。 ない プロセスごとのメモリ使用率の履歴を提供します。
免責事項:私は Process Lasso の作者ですが、実際にはここでそれを支持しているわけではありません。より良いソリューション (perfmon が最適です) があるからです。
これまでで最高のものは、Windows Vista+ リソースおよびパフォーマンス モニターです。プロセスによる CPU、メモリ、ネットワーク、ディスク アクセスの使用状況を経時的に追跡できます。これは、はるか昔に作成されるべきであった、総合的なシステム情報ユーティリティです。私が間違っていない限り、(リストされている他の項目の中でも特に) プロセスごとの CPU とメモリの使用率を長期にわたって追跡できます。
C#/Perl/Java スクリプトを使用して、WMI コマンドを使用して使用率データを取得することもできます。その手順を以下に示します。
2 つの WMI 選択クエリを実行し、CPU% 使用率の式を適用する必要があります
1.論理プロセスの総数を取得するには
select NumberOfLogicalProcessors from Win32_ComputerSystem
2.PercentProcessorTime、TimeStamp_Sys100NS (CPU 使用率の式が適用され、実際の使用率を取得)、および WorkingSetPrivate (RAM) の値を 1 秒のスリープ間隔で最低 2 回取得するには
select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234
3.CPU% 使用率の計算式を適用する
CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors
p2 は 2 回目に取得した PercentProcessorTime を示し、p1 は初めて取得した PercentProcessorTime を示し、t2 と t1 は TimeStamp_Sys100NS 用です。
このためのサンプル Perl コードはリンクにあります。 http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/
このロジックは、WMI クエリをサポートするすべてのプログラミング言語に適用されます。
私はこれを試したことはありませんが、 プロシーダンプ より良い解決策のようです。
サイトからの説明:
ProcDump はコマンド ライン ユーティリティで、その主な目的は、アプリケーションの CPU スパイクを監視し、スパイク中にクラッシュ ダンプを生成し、管理者または開発者がスパイクの原因を特定するために使用できるようにすることです。ProcDump には、ハング ウィンドウの監視 (Windows とタスク マネージャーが使用するウィンドウ ハングの同じ定義を使用)、未処理の例外の監視も含まれており、システム パフォーマンス カウンターの値に基づいてダンプを生成できます。また、他のスクリプトに埋め込むことができる一般的なプロセス ダンプ ユーティリティとしても機能します。
うーん、そうですか プロセスエクスプローラー グラフはあまり便利ではありませんが、それは可能です。代替/より良い方法をまだ探しています。
Perfmon.exe は Windows に組み込まれています。
見てみるといいかもしれません なげなわを処理する.
CPU/RAM/IO速度の履歴グラフにはtaskinfoを使用しています。http://www.iarsn.com/taskinfo.html
しかし、突然の応答不能は、HD/SS ドライブの故障による中断時間のように聞こえます。