個々のWindowsサービスのメモリ使用量を見つける方法


42

タスクマネージャーは、svchost.exeの全体的なメモリ使用量を表示します。個々のサービスのメモリ使用量を表示する方法はありますか?


これは、svchost.exeのFinegrainedパフォーマンスレポートに似ていることに注意してください。


1
誰も(私のような)同じ問題を持つ場合: - Windowsのタスクマネージャ- >パフォーマンス(タブ) - >リソースモニタ(ボタン) -そして、あなたは、Windows 7上でのサービスによってsvchost.exeがスプリットを取得
オリバー

1
@Oliver Resource MonitorはサービスごとのCPUを表示しますが、この質問はメモリに関するものです。
エイダンライアン14

このSO回答では、個々のサービスのメモリをチェックするスクリプトを見ることができます。
ロズベルグリニャレス

@RosbergLinharesこのスクリプトはPeterMortensenのものと同等です
エイダンライアン

@AidanRyan、私にとっては、PeterMortensenのスクリプトはScheduleサービスとgpsvcサービスでは機能しませんでした。
ロズベルグリニャレス

回答:


51

求めている情報を取得する簡単な方法があります(ただし、システムにわずかな変更が必要です)。

各サービスを分割して独自のSVCHOST.EXEプロセスで実行すると、CPUサイクルを消費するサービスがタスクマネージャーまたはプロセスエクスプローラーで簡単に表示されます(「=」の後のスペースが必要です)。

SC Config Servicename Type= own

これをコマンドラインウィンドウで行うか、BATスクリプトに入れます。管理者権限が必要であり、有効にする前にコンピューターの再起動が必要です。

元の状態は次の方法で復元できます。

SC Config Servicename Type= share

例:Windows Management Instrumentationを別のSVCHOST.EXEで実行するには:

SC Config winmgmt Type= own

この手法は、おそらくメモリ消費をわずかに増やすことを除いて、悪影響はありません。また、各サービスのCPU使用率を監視するだけでなく、各サービスのページフォールトデルタ、ディスクI / O読み取り速度、ディスクI / O書き込み速度を簡単に監視できます。プロセスエクスプローラーの場合、[表示] / [列の選択]メニュー:[プロセスメモリ/ページフォールトデルタ]タブ、[プロセスパフォーマンス/ IOデルタ書き込みバイト]タブ、[プロセスパフォーマンス/ IOデルタ読み取りバイト]タブ。


ほとんどのシステムでは、多数のサービスを持つSVCHOST.EXEプロセスのみがあります。このシーケンスを使用しました(コマンドラインウィンドウに直接貼り付けることができます)。

rem  1. "Automatic Updates"
SC Config wuauserv Type= own

rem  2. "COM+ Event System"
SC Config EventSystem Type= own

rem  3. "Computer Browser"
SC Config Browser Type= own

rem  4. "Cryptographic Services"
SC Config CryptSvc Type= own

rem  5. "Distributed Link Tracking"
SC Config TrkWks Type= own

rem  6. "Help and Support"
SC Config helpsvc Type= own

rem  7. "Logical Disk Manager"
SC Config dmserver Type= own

rem  8. "Network Connections"
SC Config Netman Type= own

rem  9. "Network Location Awareness"
SC Config NLA Type= own

rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own

rem 11. "Secondary Logon"
SC Config seclogon Type= own

rem 12. "Server"
SC Config lanmanserver Type= own

rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own

rem 14. "System Event Notification"
SC Config SENS Type= own

rem 15. "System Restore Service"
SC Config srservice Type= own

rem 16. "Task Scheduler"
SC Config Schedule Type= own

rem 17. "Telephony"
SC Config TapiSrv Type= own

rem 18. "Terminal Services"
SC Config TermService Type= own

rem 19. "Themes"
SC Config Themes Type= own

rem 20. "Windows Audio"
SC Config AudioSrv Type= own

rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own

rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own

rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own

rem 24. "Workstation"
SC Config lanmanworkstation Type= own

rem End.

12
PowerShellユーザー向け:Get-Service | ForEach-Object {C:\ Windows \ System32 \ SC.EXE config $ _。Name type = own}
タマラウィスマン

1
実際、私は通常svchost.exe、Windows XPシステムで3つまたは4つのインスタンスに気付きます。これに私は6を見ます
。– SamB

4
@TomWij:このスニペットを使用するときは非常に注意してください-EFS (暗号化ファイルシステム)を使用してtype= ownいて、それを設定すると正しく動作しない場合があり、それで暗号化されたファイルにアクセスできなくなりますOSファイルが暗号化されている場合は壊滅的です!)
Beau

@ボー:なぜ明示的に知っていますか?
タマラウィスマン

2
@Peter Mortensen:Service Disclosureツールを作成しました。It 1. svchost.exeプロセスを共有するサービスを保存します。2.サービスを個別のプロセスで実行するように構成します。3.ステップ#1で保存されたすべてのサービスを1つのプロセスに戻します。あなたのコメントや提案を歓迎します。アイデアをありがとう。
ドミトロOvdiienko

18

組み込みtasklistコマンドを使用して、サービス名(/fiスイッチ)でフィルター処理できます。次に例を示します。

 tasklist /fi "services eq TermService"

出力:

イメージ名PIDセッション名セッション番号メモリ使用量
================================================= ========== =============
svchost.exe 2940コンソール0 7.096 K

名前がわからない場合は、次のステートメントを実行してリストできます。

 tasklist /svc /fi "imagename eq svchost.exe"

svchost.exeによってホストされているすべてのサービスがリストされます。次に例を示します。

イメージ名PIDサービス
================================================= ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp、Dnscache
svchost.exe 788 LmHosts、W32Time
svchost.exe 804 AeLookupSvc、AudioSrv、ブラウザ、CryptSvc、
                                   dmserver、EventSystem、helpsvc、
                                   lanmanserver、lanmanworkstation、メッセンジャー、
                                   Netman、Nla、RasMan、Schedule、seclogon、
                                   SENS、ShellHWDetection、TrkWks、winmgmt、
                                   wuauserv、WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 RemoteRegistry
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

サービスは必ずしもでホストされているわけではありませんsvchost.exe。そのため、実行中のファイル名でフィルタリングするサービスが見つからない場合は、単に実行しtasklist /svcます。すべてのサービスが表示されます。


6
これは、質問で要求されているように、個々のサービスによって使用されるメモリを表示していないようです。
ダンカンジョーンズ

9

プロセスエクスプローラーは実際にsvchost内の個々のメモリ使用量を表示します。ここから最新バージョンを入手していることを確認してくださいhttp://technet.microsoft.com/en-us/sysinternals/bb896653

管理者としてProcess Explorerを実行し、検査するsvchostをクリックして、View DLLsボタン(またはCTRL+D)をクリックしてください。[DLL]ウィンドウでヘッダーを右クリックし、Select Columns...チェックしてWS Total Bytes、を押しますOK

これで、svchost内の個々のサービス(dllで実装)のメモリ使用量を表示およびソートできます。


4
ヒープサイズは表示されません。
Der_Meister 14

7

プロセスモニターは汎用ユーティリティ(皿洗い以外のすべてを実行します)ですが、この特定の質問では、VMMap(別のSysInternalsユーティリティ)を使用します

http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

VMMapは、プロセス仮想および物理メモリ分析ユーティリティです。プロセスのコミットされた仮想メモリタイプの内訳と、オペレーティングシステムによってそれらのタイプに割り当てられた物理メモリ(ワーキングセット)の量が表示されます。メモリ使用量のグラフィック表示に加えて、VMMapは要約情報と詳細なプロセスメモリマップも表示します。強力なフィルタリングおよび更新機能により、プロセスのメモリ使用量のソースとアプリケーション機能のメモリコストを特定できます。

ライブプロセスを分析するための柔軟なビューに加えて、VMMapは、すべての情報を保存して読み込むことができるネイティブ形式など、複数の形式でのデータのエクスポートをサポートします。スクリプトシナリオを有効にするコマンドラインオプションも含まれます。


5
クール!ヒープメモリのブロックの使用状況を、それを所有する個々のサービスまで追跡する方法はありますか?
エイダンライアン

3

これはstackoverflowの領域に入りつつありますが、スレッドごとのメモリ統計を取得できる場合は、スレッドスタックにリストされているdllと一致させることで、個々のサービスdllに大まかに相関させることができます。しかし、私の小さなシステム管理者の脳にとっては多すぎる。


2

ピーターモーテンセンの答えをここで拡張します。サービスのタイプを変更する前に、次のようなコマンドで既存のタイプを確認してください。

sc query wuauserv

以下が出力されます:

    TYPE               : 20  WIN32_SHARE_PROCESS
    STATE              : 1  STOPPED
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

「10 WIN32_OWN_PROCESS」、「20 WIN32_SHARE_PROCESS」以外のタイプは変更しないでください。


1

サービスを分離するのは正しい答えですが、sc configコマンドは機能しませんでした(2008 R2)。

ただし、レジストリ経由で行うことができます。つまり、「タイプ」パラメーターを0x00000010(12月16日)に設定します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<ServiceName>\Type

変更するサービスを選択する際には注意してください。「所有」と「共有」以外にも、変更すべきではない特別なタイプがあります。

  • カーネル
  • filesys
  • レック
  • 適応する

その後、サービスを再起動するだけで、ProcessExplorerに独自のsvchost.exeプロセスがあることがわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.