svchost.exeによる異常なCPU使用率を診断する方法は?[複製]


19

デュアルコアPentiumを搭載したWin 7 32ビットシステムを搭載したラップトップを持っています(2010年のラップトップです)。正常に動作する場合もありますが、通常は100%のCPU負荷でアイドル状態になります。CPUは2つのsvchost.exeプロセスによって消費されます(それぞれ50%)。私の知る限り、これはサービスホストです。どのサービスが犯人であるかを知る方法はありますか?

注意:これはセーフモードでも発生します。


1
プロセスエクスプローラーを使用して、svchostの2つのインスタンス(technet.microsoft.com/en-us/sysinternals/processexplorer.aspx)の下で実行されているサービスを確認できます
Yorik

@Yorik:私はそのことを考えましたが、ProcessExplorerは何の役にも立ちませんでした。
バイオレットキリン

5
Windows 7では、現在、svchost CPUの問題の90%以上がWindows Updateサービスに関連していると言えます。システムを最新の状態に保つのに本当に問題がある場合(古いプロセッサを使用した新規インストールでは困難な場合があります)、ネットワークに接続せずにKB3050265、KB3138612、KB3145739をインストールしてください。次に、再起動してアップデートを検索します。
オントラック

@ontrack:興味深い。実際、このマシンでは更新のチェックが無効になっていると思います。おそらく2010年または2012年以降は更新されていません。また、更新をインストールする必要はありません。CPUの問題を修正するだけです。正しい場合は、Windows Updateサービスを無効にするだけで役立ちますか?
バイオレットキリン

これは何度も聞かれました。dupを参照してください。WUのスキャニングの問題が発生する可能性があります。私の答えの手順から解決してください:superuser.com/a/996072/174557
magicandre1981

回答:


28

svchost.exeのインスタンスは複数のシステムサービスをホストするため、各サービスをsvchost.exeの独自のインスタンスに分離して、どのサービスがCPUを消費しているかを調べる方法を次に示します。

手順は次のとおりです。

  1. タスクマネージャーを使用して、CPUの降順でソートされたすべてのプロセスを表示し、CPUを消費するプロセスのPIDをマークします

  2. コマンドプロンプト(cmd)でコマンドを入力します
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    ここに画像の説明を入力してください

  3. svchost.exeの問題のあるインスタンスはPIDで特定できるようになり、右側にホストしているシステムサービスのリストが表示されます。

  4. リスト内の名前ごとに、管理者として実行されるコマンドプロンプト(cmd)で次のコマンドを入力します
    sc config <name> type= own
    (「=」と「own」の間のスペースに注意してください)。

  5. リブート

分離したシステムサービスはそれぞれsvchost.exeの独自のインスタンスで実行され、[プロセス]タブのタスクマネージャーで確認できます。インスタンスを右クリックして[サービスに移動]を選択すると、サービスに直接移動するか、tasklistコマンドを再度使用できます。

詳細については、Microsoftの記事
「SVCHOST.EXEのトラブルシューティング」を参照してください。


7

Process Explorerはこれを簡単にします。これは、64ビットWindows 7 Professionalおよび64ビットWindows 10 Pro上のProcess Explorer v16.20で動作することを確認しています。

  1. 昇格されたProcess Explorerを実行します。
  2. 列のsvchost.exe値が高い(または単に測定可能/空白でない)プロセスを見つけますCPUProcessまたはCPU列でソートすると、これに役立ちます。
  3. svchost.exeプロセスを右クリックしてを選択しますProperties...
  4. プロセスのプロパティウィンドウで、Threadsタブを選択します。このプロセスのすべてのスレッドが表示されます。
  5. CPU列の値が高い(または、再び測定可能/空白でない)スレッドを見つけます。CPUこれは列でソートするのに役立ちます。Process Explorerプロセスの[スレッド]タブ
  6. Service列には、そのスレッドが実行されているサービスの名前が表示されます。

サービス名がよく知らない場合...

  1. プロセスのプロパティウィンドウで、Servicesタブを選択します。このプロセスで実行されるすべてのサービスが表示されます。
  2. タブの列を、手順6で見つけたタブの列の値に一致させServiceます。ServicesServiceThreadsProcess Explorerプロセスの[サービス]タブ
  3. Display Name列には、サービスのフレンドリ名が表示されます。選択したサービスの説明がサービスのリストの下に表示されます。

ああ、Process Explorerの高度な機能については知りませんでした。ありがとう。
バイオレットキリン

3

タスクマネージャを使用できます。他の方法もあります(コマンドライン、またはWinAPIを使用してプログラムを作成することもできます)が、ここでは説明しません。先に進む前に、ユーザーには管理者権限が必要です。

上のプロセスのタブ:

  • [ すべてのユーザーのプロセスを表示する]をオンにします
  • プロセス「表の見出し」を右クリック(のように列名が含まれているイメージ名PIDユーザー名CPU、...)、および選択列の選択を...
    • 表示されるダイアログで、下にスクロールし、コマンドライン、およびPID(プロセス識別子)確認してからOKを押します。
  • 戻るプロセスのタブ、をクリックしてCPUのプロセスがそのCPUの消費量(プロセスが昇順/降順で表示されるかもしれないことに注意してください-上の各クリックで注文されるように列ヘッダCPUが注文を切り替え)、2つの工程までクリック表の上部に表示されます。今、あなた 』は彼らのコマンドライン(私にはわかりませんが、私は彼らの1人がnetsvcs(ネットワークサービス)であると感じています)と彼らのPIDも見ることができます。

  • 次に、2つのプロセスをサービスに一致させる必要があります。そのためには、次のいずれかを実行できます。

    • それらを右クリックし、[ サービスに移動... ]をクリックします。これは[ サービス ]タブに移動し、そのプロセスで実行されているすべてのサービスが選択されます(このオプションでは、前の手順は必要ありません:))。
    • mmcでサービススナップインを開きます。サービスをダブルクリックすると(実行中のサービスのみをチェックするのが理にかなっています)、実行可能ファイルへのパスの下に、一致を実行するコマンドラインが表示されます。
  • W10あなたがから必要な正確な情報を表示することができますリソースモニタを(あなたがからそれを起動することができますタスクマネージャパフォーマンス ]タブ)。[ CPU ]タブに移動すると、サービスとそのCPU消費量がリストされます。

EDIT0:最初に投稿した左手スタイルを使用して右頭側をスクラッチするのではなく、よりシンプルな(そしてより理にかなった)アプローチを提供するように回答を更新しました。


コマンドラインが表示されていることに気付いたことはありません。harrymcの答えほど簡単ではありませんが、知っておくと良いでしょう。
バイオレットキリン

タスクマネージャはそれを独自に行うことができます。[サービス]タブに切り替えるときにsvchostプロセスが選択されている場合、そのプロセスで実行されているサービスがそこで選択されます。
サイモンリヒター

1
本当に?上W10(既に選択されているいくつかのサービスがあります少なくともとき)、これは起こりません。唯一の方法はであるrclickプロセスにINGの」、その後、選択したサービスに移動します(複数可)(私は逃したオプション-最も可能性が高いそれは内に存在W7と同様に)。残念ながら、確認することはできません。
CristiFati

1
@CristiFatiこのオプションは、Windows Vistaから存在しています(ソース:technet.microsoft.com/en-us/library/ff642468.aspx)、あなたはおそらく代わりに手でPIDマッチングのあなたの答えに追加する必要があります
ワシーリーアレクセエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.