ブログに戻る

MacでWindowServerのCPU使用率が高い:その正体と対処法

WindowServerがCPUを100%以上消費していますか?これは画面のすべてのピクセルを描画するmacOSのプロセスです。なぜ急上昇するのか、心配すべきはいつか、そして実際に負荷をかけているアプリの見つけ方を解説します。

Macの動作がもたつくと感じてActivity Monitorを開くと、CPUカラムの先頭にWindowServerという名前のプロセスが居座っていることがあります — 80%、150%、ときには300%にもなります。終了させるという選択肢はありません(ログアウトしてしまいます)し、定番の「Macを再起動しましょう」というアドバイスでは何が起きているのか説明になりません。このガイドでは、WindowServerが実際には何なのか、なぜ高いCPU使用率はほぼ常に原因ではなく症状なのか、そして本当にそれを急上昇させているアプリやワークロードの見つけ方を解説します。

結論から言うと

WindowServerは、あなたが画面で目にするすべてのピクセル — ウィンドウ、メニュー、カーソル、Dock、アニメーション — を合成するmacOSのプロセスです。それ自体はほとんど何もしません。CPU使用率が高く表示されているとき、その負荷は何か別のものが描画を要求していることによって生じています。挙動のおかしいアプリ、表示されているウィンドウが多すぎる、グラフィック負荷の重いブラウザページ、複数台の高解像度外部ディスプレイ、あるいはElectronベースのアプリでGPUアクセラレーションされたレイヤーに不具合がある、といった具合です。WindowServerを終了させることはできませんし、すべきでもありません。強制終了するとユーザーセッションが終了します。対処は、上流のアプリを特定して、それに手を打つことです。ProcXrayを使えばこれを素早く行えます。プロセスごとのGPUカラムで並べ替えてグラフィック負荷の重いプロセスを見つけ、System Dashboardで全体的なGPU負荷を確認し、Window Spy Pickerで画面上の任意のウィンドウを所有しているアプリへとたどれます。

WindowServerとは何か?

WindowServerは、画面合成(コンポジット) を担当するmacOSの一部です。実行中のすべてのアプリのグラフィカルな出力を受け取り、それを1つの最終的な画像にまとめてディスプレイに表示します。/System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServerに存在し、ユーザーがログインすると自動的に起動します。ログイン中のユーザーセッションごとにWindowServerプロセスは1つあります。

内部的には、表示されている各アプリは描画したコンテンツをCore Animationレイヤーのセットとして送り出します。WindowServerはGPUにそれらのレイヤーを合成させ — 透明度、ぼかし、影、アニメーションを適用し — その結果をディスプレイのリフレッシュレート(通常は60Hz、ProMotionディスプレイでは最大120Hz)で表示します。

通常の状態では、WindowServerのCPU使用率は1%から15%程度です。内蔵ディスプレイ1台と少数のアプリだけを開いているMacでは、これが最上位のプロセスになるべきではありません。

パーセンテージについて補足です。Activity Monitorでは、100%はCPUコア1個分に相当します。複数のコアを持つMacでは、1つのプロセスが100%をはるかに超える値を報告できます。ですからWindowServerが300%でも、それは「マシン全体の300%」ではありません — 3つのコアをまるごと占有しているのと同等という意味です。

なぜWindowServerの高CPUの本当の原因はWindowServerではないのか

これがこのガイドで最も重要な視点の転換です。WindowServerは下流にあります。自分から仕事を始めることはありません。それが消費するCPUサイクルはすべて、アプリ、ウィンドウ、アニメーション、あるいはシステム自身から何かを描画するよう要求された結果なのです。

ですからWindowServerが200%のCPUを消費しているとき、診断すべき問いは「WindowServerの何が悪いのか?」ではありません。問うべきはこれです。

今、何がWindowServerにここまで激しく仕事をさせているのか?

あなたが見つけて対処すべきなのは、その上流の原因です。WindowServerを終了させてもログアウトするだけにとどまらず — 仮に瞬時に置き換えることができたとしても、まったく同じ上流の負荷がすぐに戻ってくるでしょう。

これはkernel_taskの高CPUと同じ診断パターンです。Activity Monitorの先頭に見えるプロセスは症状であって、原因ではありません。

WindowServerが急上昇する原因

よくある上流の原因は6つあり、登場頻度のおおよその順は以下の通りです。

1. ハードウェアアクセラレーションを使うアプリの不具合

Chromiumベースのブラウザ(Chrome、Edge、Arc、Brave)、Electronアプリ(Slack、Discord、VS Code、Notion、Figma)、動画編集ソフト、ゲームはいずれもハードウェアアクセラレーションされたレイヤーをWindowServerに送ります。それらのいずれかにバグや引っかかったレイヤーがあると、アプリ自体は何もしていないように見えてもWindowServerを張り付かせる可能性があります。よくある例はChromeやSlackです。

2. 多数または高解像度の外部ディスプレイ

外部ディスプレイを1台追加するごとに合成作業が増えます。4Kや5Kの外部ディスプレイ — 特にネイティブ解像度以外にスケーリングしている場合 — は、フレームごとの負荷を何倍にも増やします。外部4Kディスプレイ2台あれば、特に古いIntel Mac、低消費電力なApple Siliconの構成、追加のレンダリングパスを必要とするスケーリング(非ネイティブ)モードでは、WindowServerを大幅に押し上げ得ます。

3. 多数の表示中ウィンドウ、グラフィック負荷の重いWebコンテンツ

表示中のウィンドウはそれぞれ — 開いているブラウザウィンドウも含めて — WindowServerが合成するための独立したCore Animationレイヤー群です。現代のブラウザにおけるバックグラウンドタブは通常サスペンドされており、WindowServerの負荷を直接増やすことはありませんが、動画の多いページ、WebGLやcanvasのコンテンツ、アニメーションするWebページ(自動再生される広告、複雑なCSSアニメーション)は負荷を増やします。数十枚の表示中ウィンドウや、要求の重いタブが数枚あるだけで、WindowServerがフレームごとに追跡・合成すべき対象がかなり増えます。

4. 引っかかったアニメーションやリークしたCALayer

アプリがグラフィックリソースを適切に解放できないと、WindowServerがそれらを保持し続け、再評価し続けます。これは多くの場合、稼働時間が長くなるにつれて徐々にCPUがじわじわ上昇していき、問題のあるアプリを終了させた瞬間に急降下する、という形で現れます。

5. 透明度、視差効果、壁紙エフェクト

macOSのダイナミック壁紙や、システムの透明度・視差効果はすべてWindowServerを経由します。古いIntel Mac、あるいは内蔵グラフィックがすでに負荷状態にあるApple Silicon Macでは、これらが不釣り合いなほど高コストになることがあります。

6. macOSやGPUドライバのバグ

長年の間に、WindowServerのメモリやCPUのリークが、macOSの各種ポイントリリースで複数回報告されています。アップデート直後に急上昇が始まったのであれば、Appleのリリースノートやそのバージョンに関するApple Discussionsフォーラムを確認してください。

本当の犯人を見つける方法

Activity Monitorは出発点として自然な選択肢であり、最近のmacOSで改善されてきましたが、この特定の問題に関してはまだギャップがあります。全体的なGPUアクティビティ(ウインドウ → GPUの履歴)や、GPUを使用しているプロセスに対する%GPUカラムを表示することはできますが、WindowServerのタイムラインに揃えた連続的なプロセスごとのGPUトレンドは得られませんし、画面上のウィンドウとそれを所有するプロセスを結びつけることもできません。実際に必要なのは、まさにその2つのピースなのです。

ステップ1:Activity Monitorで素早く確認する

Activity Monitor → CPUタブを開きます。CPUで並べ替え、WindowServerのパーセンテージを確認します。ウインドウ → GPUの履歴を開き、全体のGPU負荷が高いかどうかを確認します。プロセスに%GPUカラムが見えていれば、それで並べ替えて、今この瞬間に最もGPUを使っているプロセスを特定します。

これで症状が本物であることは確認でき、グラフィック負荷の高いアプリの方向を指し示してくれますが、WindowServerとの時間的な関連付けや、どのアプリのウィンドウが原因かの確定にはまだ別の手段が必要です。

ステップ2:ProcXrayで上流のアプリを特定する

ProcXrayはこの種のリソース横断的な診断のために設計されています。

この種のデバッグにおいてActivity Monitorがどう物足りないかについてのより広い比較は、ProcXray vs Activity Monitorを参照してください。

ステップ3:容疑者を1つずつ終了してA/Bテストする

容疑者が1〜2個に絞れたら、1つずつ終了させてWindowServerのCPUが下がるのを観察します。再起動せず、セッション全体を中断することなく原因を確定できます。

ステップごとの対処法

費用が安く、混乱の少ないものから順に適用していきましょう。

1. 容疑者となるアプリを終了する

上流のプロセスを特定できたら、それを終了します。必要なら新しく開き直してください。これでWindowServerの急上昇の大半は即座に解消されます。

2. 診断として外部ディスプレイを取り外す

特定のアプリを絞り込めない場合は、外部ディスプレイを1台取り外してCPUを観察しましょう。WindowServerが大きく下がるなら、ディスプレイが負荷の主役です。その場合は、解像度を下げる、外部ディスプレイをネイティブ解像度(スケーリングなし)で使用する、あるいは必要ないときは取り外しておく、といった対処ができます。

3. 透明度と視差効果を抑える

どちらの設定も、合成作業をWindowServerからよりシンプルな描画パスへとシフトさせます。無料で元に戻せて、内蔵グラフィックのMacではしばしば効果がわかります。

4. GPU負荷の重いアプリでハードウェアアクセラレーションを無効化する

Chromeの場合:設定 → システム → 「使用可能な場合はハードウェア アクセラレーションを使用する」をオフにしてChromeを再起動します。たいていのElectronアプリにも、各自の設定下に同様のオプションがあります。これはレンダリングをGPUからCPUへシフトさせるため — アプリ自体のCPUがやや高くなる代わりに、WindowServerの急上昇を解消できることがあります。

5. 不要なウィンドウやグラフィック負荷の重いページを閉じる

バックグラウンドタブの大半はすでにサスペンドされており、WindowServerに直接負荷をかけてはいません。それよりも、不要な表示中ウィンドウを閉じること、自動再生中の動画やアニメーションするページを一時停止すること、バックグラウンドウィンドウでまだ動いているWebGLやcanvasのデモを止めることに注力しましょう。日常的に多数のブラウザウィンドウを開きっぱなしにしているなら、タブをより少ないウィンドウに集約するのも有効です。

6. ログアウトして再ログインする

ログアウトすることで、WindowServerをクリーンに終了させ、完全な再起動なしに新しい状態で再起動できます。これは個々のアプリを終了するだけでは捕まえきれなかった「引っかかったレイヤー」のケースをしばしば解消します。

7. macOSと容疑者となるアプリをアップデートする

直近のmacOSやアプリのアップデート後に問題が始まったのであれば、後続のパッチが出ていないか確認しましょう。Appleは過去に何度もWindowServerのリークに対するポイントリリース修正を出してきました。

8. 最後の手段:再起動、そして古いIntel MacのみSMCリセット

完全な再起動を行うと、WindowServerとGPUドライバの状態がリセットされます。再起動後に同じワークロードでまた急上昇が起きるのであれば、原因は一時的な状態ではなく上流にあるということなので、システムリセットを繰り返すよりも、責任のあるアプリの特定に注力すべきです。古いIntel Macでのみ、ディスプレイや電源管理の症状がWindowServerの負荷と並んで持続している場合に、SMCリセットがまれに役立つことがあります。Apple Silicon MacにはユーザーがアクセスできるSMCリセットはありませんし、いずれにせよWindowServerの問題に対する正しい対処になることはほとんどありません。

特定の容疑者が浮上しない場合の、より一般的なパフォーマンスのトリアージについては、Macが重い?適切なプロセスを終了して直す方法を参照してください。

よくある質問

WindowServerを終了したり無効化したりできますか?

いいえ。WindowServerはあなたのグラフィカルなユーザーセッション全体を動かしています。強制終了すると即座にログアウトされ、保存していない作業はすべて失われます。再ログインすればmacOSが自動的に再起動します。サポートされている無効化方法はありません。

WindowServerの高CPUはMacを傷めますか?

直接的には傷めません。持続的な高CPUは発熱を増やしバッテリー寿命を縮めますが、WindowServerそのものがその作業をしていること自体はハードウェアのリスクではありません。より深刻な懸念は、それをそこまで激しく働かせているもののほうです — 暴走したアプリがバッテリーを消費していることこそが本当のコストです。

なぜWindowServerはこんなにメモリを使うのですか?

WindowServerは表示されているすべてのアプリの描画済みレイヤーをキャッシュして、合成を高速にしています。メモリ使用量は、ウィンドウの数、ディスプレイの解像度、そしてセッションがどれだけ長く続いているかに応じてスケールします。長時間の稼働後に数ギガバイトに達するのは異常ではありません。メモリが青天井で増え続けるのであれば、リークしたレイヤーのケース(上記の原因#4)を疑い、ログアウトして再ログインしてください。

外部モニタを接続したときだけ急上昇するのはなぜですか?

外部ディスプレイを追加すると、その解像度に比例してフレームごとの合成作業が増えます。4Kの外部ディスプレイは、WindowServerがフレームごとに合成しなければならないピクセル数を、おおよそ2倍から3倍にします。急上昇が大きい場合は、外部ディスプレイをネイティブ解像度で動作させてみてください。スケーリングされたモードは追加のレンダリングパスを必要とするため、はるかにコストが高くなります。

再起動すればWindowServerの高CPUは永続的に解消されますか?

根本原因が一時的なリークである場合に限ります。再起動はWindowServerをクリーンな状態にリセットしますが、同じアプリを再び開いたり、同じディスプレイを再接続すれば、急上昇は戻ってきます。本当の対処は上流の原因を特定することであり、再起動はまっさらな状態にするだけで、治療ではありません。

参考資料


ProcXrayを無料ダウンロード →WindowServerの負荷を実際に生み出しているアプリを見つけましょう。macOS Sonoma以降、Apple Silicon & Intel対応。