it-swarm-ja.com

Windows10のメモリリーク

Windows 10でメモリリークの問題が発生してから約1年になりますが、作業に大きな影響を与えているため、今すぐ修正したいと思います。

下の写真からわかるように、私は8GBのRAMを持っています。アプリケーションが1GBを超えていなくても、その92%が使用されています。

昨年、Windows 7 Pro64ビットからWindows10にアップグレードしました。

詳細をお尋ねください。他に何を提供すればよいかわかりません。私はこれを引き起こしている可能性があるものについて途方に暮れています。

Details

2
Shyy Guy

高いメモリ使用量(2GB)の大部分の1つは、高い ページテーブル 使用量によるものです。

enter image description here

どのプロセスがそれを使用しているかを確認するには、Windows Performance Toolkit which Windows 10 SDKの一部 をインストールし、管理者としてコマンドプロンプトを開き、次のコマンドを実行します。

wpr.exe -start ReferenceSet -filemode && timeout 5 && wpr.exe -stop C:\MemUsage.etl

Windows Performance Analyzer(WPA.exe)でMemUsage.etlを開き、メモリエントリを展開します

enter image description here

グラフResidentSetを左側のグラフリストから分析ペインにドラッグアンドドロップします。

enter image description here

次に、Page Category列を左側に移動し、Page Tableエントリを展開します。

enter image description here

ここでは、ページテーブルの使用率が高いプロセスを確認できます。右側のサイト(青い線の後)に、各プロセスのページテーブルのメモリ使用量がMB単位で表示されます。

また、(非)ページプールの合計使用量は約2GBです。

WDKをインストールpoolmonC:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe)を実行し、次の方法でデータを並べ替えます P プールタイプの後、ページングされていない/次回ページングされた時間が上に表示され、 B バイトの後に、ほとんどのメモリを使用するタグを確認します。

次に示すように、どのプールタグが最も多くのメモリを使用しているかを確認します。

enter image description here

次に、cmdプロンプトを開き、findstrコマンドを実行します。これを行うには、cmdプロンプトを開き、引用符なしで「cdC:\ Windows\System32\drivers」と入力します。次に、「findstr/s __」と入力します。ここで、__はタグ(poolmonの左端の名前)です。これを実行して、どのドライバーがこのタグを使用しているかを確認します。

enter image description here

次に、driversフォルダー(C:\Windows\System32\drivers)に移動し、問題のドライバー(上の画像の例ではintmsd.sys)を右クリックします。 [プロパティ]をクリックし、[details]タブに移動して製品名を見つけます。その製品のアップデートを探してください。

両方の問題を修正すると、4GB近く戻る可能性があります。

Stackoverflowのスクリーンショットに基づいて、Windows関数に属する4つのタグ(VoSM、FILE、Ntfx、Proc)。

このテキストをコピーして新しいtxtファイルに貼り付け、名前をPoolTagLeak.wprpに変更します。

<?xml version="1.0" encoding="utf-8"?>
<WindowsPerformanceRecorder Version="1.0" Author="MagicAndre1981" Copyright="MagicAndre1981" Company="MagicAndre1981">
  <Profiles>
    <SystemCollector Id="SystemCollector" Name="NT Kernel Logger">
      <BufferSize Value="1024" />
      <Buffers Value="1024" />
    </SystemCollector>
    <SystemProvider Id="SystemProvider">
      <Keywords>
        <Keyword Value="Pool" />
      </Keywords>
      <Stacks>
        <Stack Value="PoolAllocation" />
        <Stack Value="PoolAllocationSession" />
      </Stacks>
      <PoolTags>
        <PoolTag Value="VoSM"/>
        <PoolTag Value="File"/>
        <PoolTag Value="Ntfx"/>
        <PoolTag Value="Proc"/>
      </PoolTags>
    </SystemProvider>
    <Profile Id="PoolUsage.Verbose.File" Name="PoolUsage" Description="Pool usage Tag 'Leak' " LoggingMode="File" DetailLevel="Verbose">
      <Collectors>
        <SystemCollectorId Value="SystemCollector">
          <SystemProviderId Value="SystemProvider" />
        </SystemCollectorId>
      </Collectors>
    </Profile>
    <Profile Id="PoolUsage.Verbose.Memory" Name="PoolUsage" Description="Pool usage Tag 'Leak'" Base="PoolUsage.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose" />
  </Profiles>
</WindowsPerformanceRecorder>

次に、wpr.exe -start C:\PoolTagLeak.wprp && timeout 600 && wpr.exe -stop C:\PoolusageUsage.etlを実行して、使用量の増加を再現してみます。

Pool Graphを分析ペインにドラッグアンドドロップし、列をTypePooltagStackの順序にします。

enter image description here

次に、AIFO(内部に割り当てられ、外部で解放されるため、リークの可能性があります)に移動し、4つのタグを見つけてスタックを展開し、このタグが使用する関数を確認します。関数の名前に基づいて、「原因」を確認できます。私のデモでは、Threタグ(スレッド)は、多くのスレッドを開始するため、G-DataのAVKCl.exeによって使用されます。それを修正するためのドライバー/プログラムの更新を探します。

9
magicandre1981