web-dev-qa-db-ja.com

プロセスごとのCPUおよびメモリ使用量の追跡

私のアプリケーションの1つが、思っているよりも多くのCPUサイクルを消費しているのではないかと思います。問題は、それが突然発生することです。タスクマネージャを見るだけでは、すぐに使用できるだけであるため、私を助けません。

あるプロセスのCPUとメモリの使用履歴を追跡する方法はありますか(Windows上)。例えば。 「firefox」の追跡を開始します。1時間ほどすると、その時間のCPUとメモリ使用量のグラフが表示されます。

既製のツールか、これを達成するためのプログラム的な方法を探しています。

153
Eli Bendersky

Start > Runperfmonと入力してEnterキーを押します。パフォーマンスウィンドウが開いたら、+記号をクリックして、グラフに新しいカウンターを追加します。カウンターは、PCの動作のさまざまな側面であり、類似性によって「パフォーマンスオブジェクト」と呼ばれるグループにグループ化されます。

質問については、「プロセス」、「メモリ」、および「プロセッサ」パフォーマンスオブジェクトを選択できます。その後、これらのカウンターをリアルタイムで見ることができます

また、ユーティリティを指定して、後で検査するためにパフォーマンスデータを保存することもできます。これを行うには、左側のパネルで「パフォーマンスログとアラート」を選択します。 (システムモニターコンソールのすぐ下にあり、上記のカウンターが表示されます。ない場合は、[ファイル]> [スナップインの追加と削除]をクリックし、[追加]をクリックして、リストの[パフォーマンスログとアラート]を選択します"。)[パフォーマンスログとアラート]から、[カウンターログ]の下に新しい監視構成を作成します。その後、カウンターを追加し、サンプリングレート、ログ形式(バイナリまたはプレーンテキスト)およびログの場所を指定できます。

158
Martin08

Process Explorer は、プロセスごとの合計CPU時間とプロセスごとの履歴グラフを表示できます。

40
Niall

Perfmon.exeを使用して、メモリ使用量を追跡するために「Process」カウンターの下にある「Private Bytes」カウンターを使用してみましたが、うまく機能しています。

16
CppNoob

おそらくこれを使用できます。それはあなたのために働くはずであり、指定されたプロセスのプロセッサ時間を報告します。

@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.
10
Rich Kreider

私は同意します。perfmon.exeを使用すると、監視するプロセスのカウンターを追加できます(右パネルを右クリックします)。

パフォーマンスオブジェクト:プロセス[リストからインスタンスを選択]チェックボックスをオンにし、firefoxを選択します。

7
Ady Romantika

WMIはWindows Management Instrumentationであり、Windowsのすべての最新バージョンに組み込まれています。 CPU使用率、ディスクI/O、メモリ使用率などをプログラムで追跡できます。

Perfmon.exeはこのインターフェイスのGUIフロントエンドであり、プロセスの監視、ログへの情報の書き込み、および事後のログの分析を可能にします。それは世界で最もエレガントなプログラムではありませんが、仕事を成し遂げます。

6
doflynn

プロセスラッソは、グラフではなく、プロセスの自動化と優先度クラスの最適化のために設計されています。つまり、doesプロセスごとのCPU使用率履歴を提供します(グラフ上に白い線として描画されます)が、NOTプロセスごとのメモリ使用率履歴を提供します。

免責事項:私はProcess Lassoの著者ですが、より良い解決策があります(perfmonが最適)ので、実際にはここで承認していません。

これまでで最高のことは、Windows Vista +のリソースとパフォーマンスモニターです。 CPU、メモリ、ネットワーク、およびディスクアクセスの使用状況をプロセスごとに追跡できます。ずっと前に作成されていたはずの優れた全体的なシステム情報ユーティリティです。間違っていない限り、プロセスごとのCPUとメモリの使用率を経時的に追跡できます(リストされている他のものの中)。

2
dyasta

また、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クエリをサポートするすべてのプログラミング言語に適用されます

2
Kaarthikeyan

私はこれを試していませんが、 ProcDump はより良い解決策のようです。

サイトからの説明:

ProcDumpはコマンドラインユーティリティであり、その主な目的は、管理者または開発者がスパイクの原因を特定するために使用できるCPUスパイクのアプリケーションを監視し、スパイク中にクラッシュダンプを生成することです。 ProcDumpには、ハングしたウィンドウの監視(Windowsとタスクマネージャーが使用するウィンドウハングの同じ定義を使用)、未処理の例外監視も含まれ、システムパフォーマンスカウンターの値に基づいてダンプを生成できます。また、他のスクリプトに埋め込むことができる一般的なプロセスダンプユーティリティとしても機能します。

2
sean

Process Lasso をご覧ください。

1
maksa

うーん、グラフはあまり便利ではありませんが、 Process Explorer でできることがわかります。代替/より良い方法をまだ探しています。

1
Eli Bendersky

Perfmon.exeはWindowsに組み込まれています。

1
SaaS Developer

Windows 10では、タスクマネージャーは累積CPU時間を表示できます。 [アプリの履歴]タブと[使用履歴の削除]に移動します。次に、1〜2時間実行します。

Windows 10 Cumulative CPU time

これがしないことは、ブラウザでの使用をタブごとに分類することです。非常に多くの場合、非アクティブなタブは非常に多くの作業を行い、タブを開くたびにエネルギーが消費され、PCが遅くなります。

1
Bryce

CPU/RAM/IO速度の履歴グラフにtaskinfoを使用します。 http://www.iarsn.com/taskinfo.html

しかし、無反応のバーストは、ファルティHD/SSドライブによる割り込み時間のように聞こえます。

0
Terrik