マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

良くあるメモリ・リークの事例と、関連する基礎用語・知識

メモリ・リークでのメモリ不足

プログラム上の問題。

設計上の問題

  • 大量データをキャッシュ
  • 不要なデータ(列など)を取得
  • 大量の結果セットを取得(SELECT文)
  • 巨大なDLL、Assembly(本来分割すべきもの)

実装上の問題

不要なオブジェクトのコピー

そもそも処理に不要なメモリを無駄に確保している状態。

メモリ・オブジェクトの開放漏れ

不要になったメモリを無駄に確保し続けている状態。

  • リソースリーク、ハンドルリーク
    • メモリ以外のリソースリーク。
    • ハンドルのリークという形で確認できる。
    • スレッドのリークはスタック(メモリ)のリークにも繋がる。

ヒープの断片化

設計上の問題でもあり、実装上の問題でもある(ヒープ・マネージャに任せた結果)。

仮想アドレス空間のブロックのサイズの大小が影響して、ヒープの断片化が問題になる。
断片化により、実際にコミットできるのは仮想アドレス空間の半分程度になることもある。

参考

メモリ・リーク以外でのメモリ不足

システム上の問題。

ページ プールと非ページ プールのトリミングが間に合わない。

利用率80%を超えてから開始されるトリミングが、大量の一時オブジェクトの作成に間に合わない事がある。

ディスクへの書き込みが間に合わない。

  • 遅延書き込みキャッシュが影響してメモリ不足が発生することがある。
  • 約 500 MB の よりも大きいファイルをコピーする場合、
    全体的なシステム パフォーマンスが低下が発生する可能性があります。
    Windows Server 2003 SP1 または Windows Server 2003 sp2
    http://support.microsoft.com/kb/920739/ja

irpstacksize拡張の判断基準

  • IO要求はIRPとIRPスタックというデータ構造で受け渡される。
  • IRPスタックのサイズが不足してデバイスが使用できなくなることがある。

カーネル メモリ スペース縮小の影響

  • 32bitOSにて3GBスイッチを適用することで、カーネル メモリ スペースが2GBから1GBに縮小される影響。
  • また、32bitOSに多くの物理メモリを搭載すると物理メモリと仮想メモリのマップ情報を管理する カーネル メモリ スペース(PTE)が圧迫される。
  • Windows Server 2003、Windows XP、および Windows 2000で発生するエラー メッセージ
    STOP 0x0000003F および STOP 0x000000D8をトラブルシューティングする方法
    http://support.microsoft.com/kb/256004/ja

Large Pageの影響

Large Pageの確保のトリミングが完了するまでシステムが応答しなくなる。

ESENTキャッシュの影響(ドメインコントローラ)

ESENTキャッシュがlsass.exeのメモリリークの原因となっている事がある。

参考

メモリ・リーク

VC++のメモリ・リーク

.NETのメモリ・リーク

COMのメモリ・リーク

WWWブラウザのメモリ・リーク

障害対応に使用するツールの一覧

WinDbg

UMDH

メモリ管理

物理メモリ管理

仮想メモリ管理

ヒープ


Tags: :Windows, :メモリ管理, :障害対応, :性能, :デバッグ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-18 (水) 18:44:21 (488d)