【Windows】特定のソフトがメモリを食い潰す「メモリリーク」をプールモニターで特定する手順

【Windows】特定のソフトがメモリを食い潰す「メモリリーク」をプールモニターで特定する手順
🛡️ 超解決

Windowsパソコンで特定のソフトがメモリを大量に消費し続け、システム全体の動作が遅くなる経験はありませんか。

これは「メモリリーク」と呼ばれる現象で、ソフトが不要になったメモリを解放しないために発生します。

この記事では、パフォーマンスモニターの「プールタグ」機能を使って、メモリリークの原因となっているソフトやドライバを特定する手順を解説します。

原因を特定し、快適なPC環境を取り戻すための具体的な方法がわかります。

【要点】メモリリークの原因を特定しシステムを安定させる

  • タスクマネージャーでの初期確認: 全体的なメモリ使用状況を把握し、怪しいプロセスを特定します。
  • パフォーマンスモニター設定: カーネルプールメモリの「プールタグ」カウンタを追加し、詳細な使用状況を監視します。
  • ログ記録と分析: パフォーマンスデータを記録し、どのタグがメモリを大量消費しているかを確認して原因を特定します。

ADVERTISEMENT

特定のソフトがメモリを消費し続ける「メモリリーク」の仕組み

メモリリークとは、ソフトやドライバがシステムからメモリを確保したにもかかわらず、そのメモリを使い終わった後にシステムに返却しない状態を指します。

これにより、利用可能なメモリが徐々に減少し、最終的にはシステム全体のパフォーマンスが低下したり、動作が不安定になったりします。

メモリは大きく分けて「ユーザーモードメモリ」と「カーネルモードメモリ」の2種類があります。

ユーザーモードメモリは一般的なアプリケーションが使用し、カーネルモードメモリはオペレーティングシステムやドライバが使用します。

カーネルモードメモリのリークは、システム全体の安定性に直接影響を及ぼすため、より深刻な問題となることが多いです。

パフォーマンスモニターの「プールタグ」機能は、このカーネルモードメモリの使用状況を詳細に追跡し、どのコンポーネントがメモリを消費しているかを特定するのに役立ちます。

これにより、問題の原因となっているソフトやドライバを絞り込むことが可能になります。

パフォーマンスモニターでメモリリークの原因を特定する手順

ここでは、Windows 11を基準に、パフォーマンスモニターを使ってメモリリークの原因を特定する具体的な手順を解説します。

Windows 10でも同様の操作で実行できます。

  1. タスクマネージャーでメモリ使用状況を確認する
    タスクバーを右クリックし、「タスクマネージャー」を選択します。
    「プロセス」タブを開き、「メモリ」列をクリックして、メモリ使用量が多いプロセスを降順に並べ替えます。
    長時間稼働しているソフトや、通常よりも明らかにメモリを消費しているソフトがないか確認します。
    これはあくまで初期的な確認であり、カーネルレベルのリークはここでは特定できません。
  2. パフォーマンスモニターを起動する
    Windowsキーを押しながら「R」キーを押し、「ファイル名を指定して実行」ダイアログを開きます。
    「perfmon」と入力し、「OK」をクリックします。
    パフォーマンスモニターが起動します。
  3. データコレクターセットを新規作成する
    パフォーマンスモニターの左側ペインで、「データコレクターセット」を展開し、「ユーザー定義」を右クリックします。
    「新規」から「データコレクターセット」を選択します。
    「新しいデータコレクターセットの作成ウィザード」が開きます。
    「名前」に「MemoryLeakTrace」など識別しやすい名前を入力し、「テンプレートから作成」を選択して「次へ」をクリックします。
    「テンプレート」のドロップダウンリストから「System Diagnostics」を選択し、「次へ」をクリックします。
    「ルートディレクトリ」はデフォルトのまま「次へ」をクリックします。
    「完了」をクリックしてウィザードを閉じます。
  4. カウンタを追加する
    作成した「MemoryLeakTrace」データコレクターセットを展開し、「システム診断」を選択します。
    「システム診断」を右クリックし、「プロパティ」を選択します。
    「パフォーマンスカウンタ」タブに移動します。
    「追加」ボタンをクリックします。
    「利用できるカウンタ」リストから「メモリ」カテゴリを展開し、「プールタグ」を選択します。
    すべてのインスタンスを追加するため、「すべてのインスタンス」を選択し、「追加」をクリックします。
    「OK」をクリックしてカウンタの追加を完了します。
    「システム診断のプロパティ」ウィンドウで「OK」をクリックします。
  5. データコレクターセットを開始する
    左側ペインの「ユーザー定義」の下にある「MemoryLeakTrace」を右クリックします。
    「開始」を選択します。
    これで、システムは指定されたカウンタのデータ収集を開始します。
    メモリリークの症状が発生するまで、または一定時間システムを通常通り使用します。
    少なくとも数時間、可能であれば一晩など、長時間データを収集することで、リークの傾向をより正確に把握できます。
  6. データコレクターセットを停止する
    十分なデータを収集した後、左側ペインの「MemoryLeakTrace」を右クリックします。
    「停止」を選択します。
    データ収集が終了し、ログファイルが保存されます。
  7. ログデータを分析する
    左側ペインで「レポート」を展開し、「ユーザー定義」を展開します。
    「MemoryLeakTrace」を展開し、作成されたレポートを選択します。
    パフォーマンスモニターのグラフが表示され、各プールタグのメモリ使用量の推移を確認できます。
    グラフ上で右クリックし、「プロパティ」を選択して、表示するカウンタを絞り込むことができます。
    特に「Paged Pool Bytes」や「Nonpaged Pool Bytes」のグラフが継続的に上昇しているタグがないかを確認します。
    急激に増加しているタグがあれば、そのタグ名(例: NbtE、MmStなど)から原因となっているドライバやソフトを特定します。
    インターネット検索でタグ名を検索すると、関連するドライバやソフトの情報が見つかることがあります。

メモリリーク調査時の注意点とよくある失敗パターン

メモリリークの特定は専門的な知識を要する場合があります。

ここでは、調査中に陥りやすい問題とその対処法を解説します。

プールタグカウンタが表示されない場合の対処法

パフォーマンスモニターで「プールタグ」カウンタが表示されない場合、システムでプールタグの追跡が有効になっていない可能性があります。

この設定はレジストリを編集することで変更できますが、レジストリの編集はシステムに重大な影響を及ぼす可能性があるため、必ずバックアップを取ってから慎重に実行してください。

  1. レジストリのバックアップを作成する
    Windowsキーを押しながら「R」キーを押し、「ファイル名を指定して実行」ダイアログを開きます。
    「regedit」と入力し、「OK」をクリックしてレジストリエディターを起動します。
    レジストリエディターの左側ペインで「コンピューター」を右クリックし、「エクスポート」を選択します。
    任意の場所にバックアップファイル(.regファイル)を保存します。これにより、問題が発生した場合にレジストリを元に戻すことができます。
  2. GlobalFlagの値を変更する
    レジストリエディターで、以下のパスに移動します。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
    右側ペインで「GlobalFlag」というDWORD値を探します。存在しない場合は、右クリックして「新規」から「DWORD 32ビット値」を選択し、「GlobalFlag」という名前で作成します。
    「GlobalFlag」をダブルクリックし、「値のデータ」に「400」と入力し、「表記」で「16進数」が選択されていることを確認して「OK」をクリックします。
    または、「10進数」を選択し、「1024」と入力して「OK」をクリックします。
  3. システムを再起動する
    レジストリの変更を適用するには、システムの再起動が必要です。
    再起動後、再度パフォーマンスモニターでプールタグカウンタが表示されるか確認します。

ログファイルが肥大化してしまう場合の対策

長時間のデータ収集は、ログファイルのサイズが非常に大きくなる原因となります。

特にSSDのような容量の限られたドライブを使用している場合は注意が必要です。

データコレクターセットのプロパティで、ログファイルの最大サイズを設定できます。

「停止条件」タブで「最大サイズ」を有効にし、適切なサイズ(例: 500MB〜1GB)を設定することで、ディスク容量の圧迫を防げます。

また、サンプリング間隔を長くする(例: 1秒から5秒や10秒に変更する)ことで、ログのデータ量を減らすこともできます。

特定のドライバやサービスが原因の場合の対処

プールタグから原因となるドライバやサービスを特定できた場合、以下の対処法を検討します。

ドライバの更新: 問題のドライバが古い場合、最新バージョンに更新することでリークが解消されることがあります。

ソフトの再インストールまたは更新: 特定のソフトが原因であれば、そのソフトを再インストールするか、最新版に更新します。

ソフトの無効化またはアンインストール: どうしても解決しない場合は、問題のソフトやサービスを一時的に無効にするか、アンインストールを検討します。

製造元への問い合わせ: 独自開発のドライバや業務ソフトの場合、製造元に問い合わせて修正プログラムの提供を求めることも重要です。

ADVERTISEMENT

メモリリークの特定方法:タスクマネージャーとパフォーマンスモニターの比較

メモリ使用状況の確認にはいくつかのツールがありますが、それぞれ目的と得られる情報が異なります。

タスクマネージャーとパフォーマンスモニターの主な違いを比較します。

項目 タスクマネージャー パフォーマンスモニター(プールタグ)
目的 リアルタイムのプロセスごとのメモリ使用状況の確認 カーネルプールメモリリークの原因となるドライバやコンポーネントの特定
特定できる情報 プロセスごとのユーザーモードメモリ使用量、全体的なシステムリソース カーネルモードのプールメモリ使用状況、リークしているメモリのタグ名
難易度 簡単、日常的な監視に最適 専門知識が必要、詳細な分析向け
対応OS Windows 11, Windows 10 Windows 11, Windows 10

まとめ

この記事では、Windowsパソコンで発生するメモリリークの原因を、パフォーマンスモニターのプールタグ機能を使って特定する手順を解説しました。

タスクマネージャーでの初期確認から、パフォーマンスモニターでの詳細なログ記録と分析、そしてレジストリ編集を含むトラブルシューティングまで、段階的に進めることができます。

原因を特定できた場合は、ドライバやソフトの更新、再インストールなどの対処法を検討してください。

これにより、メモリリークによるシステムパフォーマンスの低下を解消し、業務効率を向上させることが可能です。

定期的なシステム監視と適切な対処で、安定したWindows環境を維持しましょう。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。