web-dev-qa-db-ja.com

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

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


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

43
Aidan Ryan

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

各サービスを分割して独自の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プロセスが1つしかありません。私はこのシーケンスを使用しました(コマンドラインウィンドウに直接貼り付けることができます):

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.
51
Peter Mortensen

組み込みの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、Browser、 CryptSvc、
 dmserver、EventSystem、helpsvc、
 lanmanserver、lanmanworkstation、Messenger、
 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を実行してください。すべてのサービスが表示されます。

19
splattne

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

必ず管理者としてProcess Explorerを実行し、検査するsvchostをクリックして、View DLLsボタン(または CTRL+D)。 DLLウィンドウでヘッダーを右クリックし、Select Columns...、次にチェックWS Total BytesOKを押します。

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

9
Chris T.

Process Monitorは汎用のユーティリティです(皿を洗う以外のすべてを実行します)が、この特定の質問ではVMMap(別のSysInternalsユーティリティ)を使用します。

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

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

ライブプロセスを分析するための柔軟なビューに加えて、VMMapは複数の形式でのデータのエクスポートをサポートしています。スクリプトシナリオを有効にするオプション

7
Sean Earp

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

3
user2278

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

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」以外のタイプは変更しないでください。

2
sken130

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

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

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

変更するサービスを選択する場合は注意が必要です。「own」と「share」の他に、変更してはならない次のような特別なタイプがあります。

  • カーネル
  • filesys
  • rEC
  • 適応する

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

1