私のアプリケーションの1つが、思っているよりも多くのCPUサイクルを消費しているのではないかと思います。問題は、それが突然発生することです。タスクマネージャを見るだけでは、すぐに使用できるだけであるため、私を助けません。
あるプロセスのCPUとメモリの使用履歴を追跡する方法はありますか(Windows上)。例えば。 「firefox」の追跡を開始します。1時間ほどすると、その時間のCPUとメモリ使用量のグラフが表示されます。
既製のツールか、これを達成するためのプログラム的な方法を探しています。
Start > Run
にperfmon
と入力してEnterキーを押します。パフォーマンスウィンドウが開いたら、+記号をクリックして、グラフに新しいカウンターを追加します。カウンターは、PCの動作のさまざまな側面であり、類似性によって「パフォーマンスオブジェクト」と呼ばれるグループにグループ化されます。
質問については、「プロセス」、「メモリ」、および「プロセッサ」パフォーマンスオブジェクトを選択できます。その後、これらのカウンターをリアルタイムで見ることができます
また、ユーティリティを指定して、後で検査するためにパフォーマンスデータを保存することもできます。これを行うには、左側のパネルで「パフォーマンスログとアラート」を選択します。 (システムモニターコンソールのすぐ下にあり、上記のカウンターが表示されます。ない場合は、[ファイル]> [スナップインの追加と削除]をクリックし、[追加]をクリックして、リストの[パフォーマンスログとアラート]を選択します"。)[パフォーマンスログとアラート]から、[カウンターログ]の下に新しい監視構成を作成します。その後、カウンターを追加し、サンプリングレート、ログ形式(バイナリまたはプレーンテキスト)およびログの場所を指定できます。
Process Explorer は、プロセスごとの合計CPU時間とプロセスごとの履歴グラフを表示できます。
Perfmon.exeを使用して、メモリ使用量を追跡するために「Process」カウンターの下にある「Private Bytes」カウンターを使用してみましたが、うまく機能しています。
おそらくこれを使用できます。それはあなたのために働くはずであり、指定されたプロセスのプロセッサ時間を報告します。
@echo off
: Rich Kreider <[email protected]>
: 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フロントエンドであり、プロセスの監視、ログへの情報の書き込み、および事後のログの分析を可能にします。それは世界で最もエレガントなプログラムではありませんが、仕事を成し遂げます。
プロセスラッソは、グラフではなく、プロセスの自動化と優先度クラスの最適化のために設計されています。つまり、doesプロセスごとのCPU使用率履歴を提供します(グラフ上に白い線として描画されます)が、NOTプロセスごとのメモリ使用率履歴を提供します。
免責事項:私はProcess Lassoの著者ですが、より良い解決策があります(perfmonが最適)ので、実際にはここで承認していません。
これまでで最高のことは、Windows Vista +のリソースとパフォーマンスモニターです。 CPU、メモリ、ネットワーク、およびディスクアクセスの使用状況をプロセスごとに追跡できます。ずっと前に作成されていたはずの優れた全体的なシステム情報ユーティリティです。間違っていない限り、プロセスごとのCPUとメモリの使用率を経時的に追跡できます(リストされている他のものの中)。
また、C#/ Perl/Javaスクリプトを使用して、WMIコマンドを使用して使用率データを取得することもできます。以下にその手順を示します。
2つのWMI Selectクエリを実行し、CPU%使用率の式を適用する必要があります
1。論理プロセスの総数を取得するには
select NumberOfLogicalProcessors from Win32_ComputerSystem
2。 PercentProcessorTimeの値を取得するには、TimeStamp_Sys100NS(CPU使用率の式が適用され、実際の使用率が取得されます)およびWorkingSetPrivate(RAM)最小2回、スリープ間隔1秒
select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234
3。 CPU使用率の式を適用する
CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors
p2は2回目に取得されたPercentProcessorTimeを示し、p1は1回目に取得されたPercentProcessorTimeを示し、t2およびt1はTimeStamp_Sys100NS用です。
このためのサンプルPerlコードはリンクにあります http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-Perl-via-wmi/ =
このロジックは、WMIクエリをサポートするすべてのプログラミング言語に適用されます
私はこれを試していませんが、 ProcDump はより良い解決策のようです。
サイトからの説明:
ProcDumpはコマンドラインユーティリティであり、その主な目的は、管理者または開発者がスパイクの原因を特定するために使用できるCPUスパイクのアプリケーションを監視し、スパイク中にクラッシュダンプを生成することです。 ProcDumpには、ハングしたウィンドウの監視(Windowsとタスクマネージャーが使用するウィンドウハングの同じ定義を使用)、未処理の例外監視も含まれ、システムパフォーマンスカウンターの値に基づいてダンプを生成できます。また、他のスクリプトに埋め込むことができる一般的なプロセスダンプユーティリティとしても機能します。
Process Lasso をご覧ください。
うーん、グラフはあまり便利ではありませんが、 Process Explorer でできることがわかります。代替/より良い方法をまだ探しています。
Perfmon.exeはWindowsに組み込まれています。
CPU/RAM/IO速度の履歴グラフにtaskinfoを使用します。 http://www.iarsn.com/taskinfo.html
しかし、無反応のバーストは、ファルティHD/SSドライブによる割り込み時間のように聞こえます。