[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>障害発生時の分析]] * 目次 [#p7fb3757] #contents *概要 [#pbf59353] *ツールの利用ポイント [#x78d9125] 監視・プロファイル ツールやサポートツールは、「[[サーバーの監視]]」のフローチャート中の -原因の把握、解決策の決定 -サポートを活用して解決策を決定する。 の部分で使用します。 障害対応のノウハウと利用可能なツールを把握しておくことで、 -問題発生時に、セルフ・サポートが可能になります。 -また、セルフ・サポートが困難な場合もサポート・エンジニアとの連携がスムーズになります。 --サポート・エンジニアと連携可能な範囲はどこか? --サポート・エンジニアに提供してもらえる情報は何か? --サポート・エンジニアに提供すべき情報は何か? *システム情報収集 [#x9ed5bd5] **イベントログ [#l83a5356] -【コラム】にわか管理者のためのWindowsサーバ入門 (85)~ イベントログの確認と保存 エンタープライズ マイナビニュース~ http://news.mynavi.jp/column/winserver/085/index.html **Microsoft Product Support Report(MPS_Report) [#mbf12952] 環境変更時や障害発生時の各種ログの収集ツール~ (各製品毎のエディションが用意されている) -ユーティリティ スポットライト: トラブルシューティング データを収集する~ https://technet.microsoft.com/ja-jp/magazine/jj860527.aspx -Microsoft Configuration Capture ユーティリティ (MPS_REPORTS) の概要~ http://support.microsoft.com/kb/818742/ja~ >MPS_REPORTS は、コンピュータの重要な情報 (システム情報、診断情報、および構成情報) ~ を収集するために使用可能なスクリプトや他のユーティリティを含む圧縮されたソフトウェア パッケージ -download Microsoft Product Support Reports~ Microsoft Download Center - Download Details~ http://www.microsoft.com/en-us/download/details.aspx?id=24745 -Microsoft Product Support Reports ログ採取方法 - JPFAQ_198373 デル Japan~ http://supportapj.dell.com/support/topics/global.aspx/support/kcs/document?c=jp&docid=226373_ja *監視系 [#oabba159] **各種リソース [#gbf18194] ***Windowsタスクマネージャ [#g51bcec3] WindowsOS付属の簡易的な各種リソース監視ツール。 -物理 --CPU --[[物理メモリ>物理メモリ管理]] --ネットワーク -論理 --[[仮想メモリ>仮想メモリ管理]] --プロセス --スレッド ***パフォーマンス [#cf3ec39c] -WindowsOS付属の各種リソース監視ツール。 -タスクマネージャよりも詳細なモニタリングが可能。 -パフォーマンスカウンタを選択し、 --パフォーマンス監視 --パフォーマンスログ出力 >が可能、これは --GUI(パフォーマンスモニタ) --GUI(logman) >で設定可能。 **プロセス監視 [#o6ab3a4f] ***Process Monitor [#n72fadf5] プロセス監視(各種イベント監視) -Windows Sysinternals > ダウンロード > プロセス > Process Monitor~ http://technet.microsoft.com/ja-jp/sysinternals/bb896645 >FileMon や Regmon を統合した、特定のカーネルの~ (ファイルシステム、レジストリ、プロセス/スレッド、ネットワーク)~ イベント(アクセス)のキャプチャフィルタ、ハイライト表示設定、ロギングが可能。 ***Process Explorer [#m8c2fc85] プロセス監視 / ハンドル数調査 / ユーザモードダンプ取得 -Windows Sysinternals > ダウンロード > プロセス > Process Explorer~ http://technet.microsoft.com/ja-jp/sysinternals/bb896653 --プロセスツリー、タイプ、使用しているDLL、ハンドル、~ イメージ(EXE)、性能情報、TCP/IPソケット、.NETバージョンなどの~ 様々な情報の確認できる。また、使用しているDLL、ハンドルの検索機能も持つ。 --プロセスの開始・終了、ユーザ・モード・プロセス・ダンプの取得も可能(ハングダンプ相当)。 --GDIオブジェクトの数、また、GDIオブジェクトが消費するプールの上限値を確認できる。~ (ただし、これにはWinDbgをインストールして、シンボルサーバを設定する必要がある)。~ ※ シンボルサーバにアクセスするためにはWinDbgが必要になるので ***Sysinternals Handle [#wac7e7c1] -Windows Sysinternals > ダウンロード > プロセス > Handle~ http://technet.microsoft.com/ja-jp/sysinternals/bb896655~ このプログラムの GUI ベースのバージョンは、[[Process Explorer>#m8c2fc85]] ***アプリケーション固有ログ [#m5b11535] [[例えば>http://opentouryo.osscons.jp/index.php?%E6%A9%9F%E8%83%BD%E4%B8%80%E8%A6%A7#u9bb0faa]]。 **DB監視 [#wad84151] -[[SQL Server系>SQL Server 問題の分析方法]] **WAS監視 [#p8a3220e] -[[IISのログ]] **クラスタ監視 [#wa82546f] クラスタログ **ネットワーク監視・プロファイル [#lfa663b2] ***ツール [#g8c2d67a] -Wireshark --パケットキャプチャとパケット分析 --管理:マクロ分析、プロファイル:ミクロ分析 ***ログ [#m083bdcf] -ネットワークモニタツール --Wireshark -負荷分散装置のログ -ファイアウォール装置のログ -スイッチのログ *デバッグ ツールセット [#ie186d18] **Debugging Tools for Windows [#vd4048ce] ***Windows Performance Recorder (WPR) [#mc9ff947] トレースデータを採取するコンポーネント ***Windows Performance Analyzer (WPA) [#m8f1da19] トレースデータを GUI で表すコンポーネント -OS機能によるアプリのパフォーマンス測定 - @IT~ http://www.atmarkit.co.jp/fdotnet/chushin/vsperf_01/vsperf_01_01.html -新しくなった Windows Performance Analyzer - Japan WDK Support Blog - Site Home - MSDN Blogs~ http://blogs.msdn.com/b/jpwdkblog/archive/2014/11/28/windows-performance-analyzer.aspx **ライブ・デバッグ・ダンプ取得・分析 [#k6d92aff] ***[[WinDbg]] [#s581d480] ***CDB [#td8a5164] ***NTSD [#nbffbe63] ***KD [#d874e24d] ***,etc. [#a07574cd] **IISライブ・デバッグ、ダンプ取得・分析 [#w71b9232] ***[[ADPlus]] [#l96fd278] [[ADPlus]] : Auto Dump+ **アンマネージド・ヒープ解析 [#u83249cc] ***[[UMDH]] [#td11cbd2] [[UMDH]]:User Mode Dump Heap *プロファイラ [#j595e8e5] **ユーザモード [#weac277d] ***Visual Studio [#o9189a2c] -Visual Studioデバッガ -VS2005パフォーマンスツール~ --パフォーマンス Visual Studio プロファイラでアプリケーションのボトルネックを見つける~ http://msdn.microsoft.com/ja-jp/magazine/cc337887.aspx -Visual Studioプロファイラ~ Visual Studio 2010 Premium / Ultimate付属のマネージド・コード・プロファイラ ***CLR Profiler [#a7c9eec5] マネージド・コード・プロファイラ(メソッドの呼出回数・時間、メモリ割当・消費、オブジェクト接続・ルート追跡) -How To 情報 CLR プロファイラの使用方法~ http://msdn.microsoft.com/ja-jp/library/ff650691.aspx -.NET ガベージ コレクション ヒープをプロファイリングする~ http://msdn.microsoft.com/ja-jp/magazine/ee309515.aspx ***[[SOS.dll>.NETのメモリ・リーク]](SOS拡張) [#wc33a7cb] マネージド・コード・プロファイラ(ライブ・デバッグ & ダンプ分析) ***Managed Stack Explorer [#c1b893e4] マネージド・コード・プロファイラ(スレッド ダンプ) -Managed Stack Explorer~ http://mse.codeplex.com/ --マネージスレッドのダンプを取得可能。 --ハングやデッドロック箇所の調査などにも利用できる。 -.NET Framework スレッドダンプ Urabi~ http://www.jurabi.jp/blog/2010/01/922 >C#アプリでデットロックぽい問題が発生したと聞いて.NETでのスレッドダンプ調べてみました。 >元ネタはここです。~ http://stackoverflow.com/questions/190236/how-do-i-make-a-thread-dump-in-net-a-la-jvm-thread-dumps >Managed Stack Explorerを使う方法とWinDbgを使う方法紹介されてますが、~ WinDbgはデバッカだし、簡単なManaged Stack Explorerを使う方法について書いてみたいと思います。 ***DevPartner Studio [#x44595c8] マネージド・コード・プロファイラ ***その他のマネージド・コード・プロファイラ [#i354c815] -商用:dotTRACE~ http://www.jetbrains.com/profiler/index.html -無償:NProf~ http://sourceforge.net/projects/nprof/ -無償:EQATEC Profiler~ http://www.eqatec.com/tools/profiler ***Rational PurifyPlus for Windows [#e4e4fea7] アンマネージドコードプロファイラ -IBM Rational PurifyPlus (ランタイム分析ツール) - Japan~ http://www-06.ibm.com/software/jp/rational/products/purifyp/ **カーネルモード [#d9762d76] ***プロファイラ [#d18fbf7a] ***Driver Verifier [#uac2c965] カーネルモードドライバのデバッグ/メモリ分析 -Driver Verifier を使用して Windows ドライバをトラブルシューティングする方法~ https://support.microsoft.com/ja-jp/kb/244617 ***Memory Pool Monitor [#i010a5aa] カーネルモードドライバのメモリ分析 ***Desktop Heap Monitor [#qf3f8a28] [[デスクトップ・ヒープ]]のメモリ分析 *メモリ・リーク [#ib2a61d9] **タスクマネージャ [#b25b83fe] ***「パフォーマンス」タブ [#wd68026b] 【】内はVista以降 -合計(システム)~ リソースの数 --ハンドル --スレッド --プロセス --【起動時間】 --【ページ・ファイル、コミット】 -物理メモリ~ 物理メモリのサイズ --合計 --利用可能【空きメモリ】: ---利用可能な物理メモリ(空き) → Memory\Available Bytes ---未使用ページリスト、ゼロページリスト、スタンバイ リストの合計 --システムキャッシュ【キャッシュ済み】:~ 以下の次の 5 種類のワーキングセットの合計 ---システム キャッシュ ページ ---ページ プール ---Ntoskrnl.exe 内のページング可能なコードとデータ ---デバイス ドライバ内のページング可能なコードとデータ ---システム マップドビュー -コミット チャージ~ 仮想メモリのサイズ → Memory\Commited Bytes --合計 --制限値 --最大値 -カーネル メモリ~ カーネル モードで使用しているメモリのサイズ --合計 --ページ --非ページ ***「プロセス」タブ [#k49b6bb2] -仮想メモリ --仮想メモリサイズ【メモリ - コミット サイズ】~ 仮想メモリのサイズ(非共有メモリの仮想メモリの使用量)~ = コミットされたサイズ、つまりプライベートバイト → Process(*)\Private Bytes --ページ プール【メモリ - ページ プール】~ プロセスのページ プールのサイズ --非ページ プール【メモリ - 非ページ プール】~ プロセスの非ページ プールのサイズ -物理メモリ(ワーキング セット)~ 以下のメモリ使用量は、トリミング可能なスペースも含めたワーキング セット全体のサイズを表示しており、他のプロセスの実行状態によって増減するので仮想メモリ(メモリ使用状況)を確認するための値としては適切ではない。 --メモリ使用量【メモリ - ワーキング セット】~ 当該プロセスの物理メモリ使用量【ワーキング セット】のサイズ --最大メモリ使用量【メモリ - ピーク ワーキング セット】~ 当該プロセスを起動してから現在までにおける、物理メモリ使用量【ワーキング セット】の最大値 --メモリ デルタ【メモリ - ワーキング セット デルタ】~ プロセスによって使用される物理メモリ使用量【ワーキング セット】使用量の変化量。 --【メモリ - プライベート ワーキング セット】~ プロセスが使用しているワーキング セットのうち、 他のプロセスと共有できない(=トリミングできない)容量だけを表すサブセット ※ XP、2003には存在しない。 -リソース --ハンドルの数 --スレッドの数 --USERオブジェクト --GDIオブジェクト ***参考資料 [#rb689104] -必要メモリ・サイズを見極める - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/166memoryusage/memoryusage.html -最適なページ・ファイル・サイズを知るには - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/076pgfilesize/076pgfilesize.html -タスク・マネージャのパフォーマンス・タブの見方(Windows Vista/Windows Server 2008編)~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1209taskv/taskv.html -タスク・マネージャのパフォーマンス・タブの見方(Windows 7/Windows Server 2008 R2編)~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1219taskv7/taskv7.html -タスク マネージャのメモリ列の意味~ http://windows.microsoft.com/ja-JP/windows-vista/What-do-the-Task-Manager-memory-columns-mean **パフォーマンスカウンタ [#hc43b0ca] ***メモリ空き容量 [#dc151d10] 未使用ページリスト、ゼロページリスト、スタンバイ リストの合計 -Memory\Available Bytes:~ バイト単位の空きメモリのサイズ -Memory\Available Kbytes:~ キロバイト単位の空きメモリのサイズ -Memory\Available Mbytes:~ メガバイト単位の空きメモリのサイズ -Memory\Pool Paged Bytes:~ ページ プールのサイズ -Memory\Pool Nonpaged Bytes:~ 非ページ プールのサイズ -Memory\Commited Bytes:~ コミットされた仮想メモリのサイズ ***メモリ使用量@プロセス毎 [#hb532bab] -Process(*)\Private Bytes:~ コミットされた仮想メモリのサイズ(他のプロセスと共有できない -Process(*)\Virtual Bytes:~ コミットと予約の双方の含む仮想メモリのサイズ -Process(*)\Working Set:~ 使用物理メモリのサイズ(他のプロセスと共有している部分も含む) -Process(*)\Pool Paged Bytes:~ ページ プールのサイズ -Process(*)\Pool Nonpaged Bytes:~ 非ページ プールのサイズ ***マネージド・メモリ@プロセス毎 [#j8baf58d] -.NET CLR Memory\# Bytes in all Heaps: --GCヒープに割り当てられたコミットと予約の双方の含む仮想メモリのサイズ --Gen 0 Heap Size、Gen 1 Heap Size、Gen 2 Heap Size、および Large Object Heap Size カウンタの合計値 -.NET CLR Memory\Gen 0 heap size:~ Gen 0 に割り当てられる最大の仮想メモリ サイズ(コミットと予約の双方の含む) -.NET CLR Memory\Gen 1 heap size:~ Gen 1 に割り当てられる最大の仮想メモリ サイズ(コミットと予約の双方の含む) -.NET CLR Memory\Gen 2 heap size:~ Gen 2 に割り当てられる最大の仮想メモリ サイズ(コミットと予約の双方の含む) -.NET CLR Memory\Large Object Heap size:~ Large Object Heapに割り当てられる仮想メモリ サイズ(コミットと予約の双方の含む) -.NET CLR Memory\# Total committed Bytes:~ GCによって現在予約されている仮想メモリのサイズ。 -.NET CLR Memory\# Total reserved Bytes:~ GCによって現在コミットされている仮想メモリのサイズ。 ***ハンドルリソースリーク [#ob3c48ea] -Process(_Total)\Handle Count:~ プロセス全体のオープンされているハンドル数 -Process(_Total)\Thread Count:~ プロセス全体のスレッド数 -Objects\Events:~ イベント数 -Objects\Mutexes:~ ミューテックス数 -Objects\Processes:~ プロセス数 -Objects\Sections:~ セクション数 -Objects\Semaphores:~ セマフォ数 -Objects\Threads:~ スレッド数 ***ハンドルリソースリーク@プロセス毎 [#he72852c] -Process(*)\Handle Count:~ 対象プロセスでオープンされているハンドル数 -Process(*)\Thread Count:~ 対象プロセスのスレッド数 ハンドルリークはカーネルモードメモリの圧迫につながる。 ***マネージド・ソース・リーク@プロセス毎 [#bb584e50] -.NET CLR LocksAndThreads\# of current logical Threads:~ ***Heap(パフォーマンス オブジェクト) [#z30f7f98] -Heap\Committed Bytes:~ ヒープマネージャによるのコミットサイズ -Heap\Allocs - Frees:~ ヒープの割り当て解放数の差 以下の設定で有効になる。 -Sysmon のヒープ カウンタを有効にする方法~ http://support.microsoft.com/kb/290639/ja ***参考資料 [#bedb96b4] -パフォーマンス・モニタの使い方(基本編) - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1229perfmon/perfmon.html -収集したカウンタ・データをパフォーマンス・モニタで表示させる - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1238perfgraph/perfgraph.html -パフォーマンス・カウンタのデータをスケジュールに従って収集する~ (Windows XP/Windows Server 2003編) - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1241schedperf/schedperf.html -パフォーマンス・カウンタのデータ収集をlogmanコマンドで制御する - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1246logman/logman.html -typeperfコマンドでシステムのパフォーマンス・カウンタのデータを収集する - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1235typeperf/typeperf.html -収集したパフォーマンス・カウンタ・ログをrelogコマンドで再編集する - @IT~ http://www.atmarkit.co.jp/fwin2k/win2ktips/1247relog/relog.html -メモリ パフォーマンス カウンター~ http://msdn.microsoft.com/ja-jp/library/x2tyfybc.aspx -パフォーマンス ログを作成する方法~ http://technet.microsoft.com/ja-jp/library/ms172556(SQL.90).aspx -第 17 章 「.NET アプリケーション パフォーマンスのチューニング」~ http://msdn.microsoft.com/ja-jp/library/ff647813.aspx ページングの分析はMemory\Page Read/secを参照する。 **ヒープ解析 [#ze4de53c] ***アンマネージド [#n9a6779a] [[UMDH]]:User Mode Dump Heap ***マネージド [#g5cf2388] -.NETのAPI --GC.GetTotalMemory メソッド~ http://msdn.microsoft.com/ja-jp/library/system.gc.gettotalmemory.aspx >現在割り当てられていると思われるバイト数を取得する。 --GC.Collect メソッド~ http://msdn.microsoft.com/ja-jp/library/system.gc.collect.aspx >強制的にガベージ コレクションを行う(推奨しない)。 System.GC.Collect(); // GC強制実行 System.GC.WaitForPendingFinalizers(); // 非同期ファイナライザの実行を待つ System.GC.Collect(); // GC強制実行(ファイナライザ完了後のメモリ開放 -[[マネージド・プロファイラ>#weac277d]] --[[Visual Studioプロファイラ>#o9189a2c]] --[[CLR Profiler>#a7c9eec5]] --[[SOS.dll(SOS拡張)>#wc33a7cb]] --[[Managed Stack Explorer>#c1b893e4]] --[[DevPartner Studio>#x44595c8]] **ダンプ解析 [#c07a7548] ***アンマネージド [#af66fd43] -ダンプ+WinDbg ***マネージド [#p29ad573] -ダンプ+WinDbg+[[SOS拡張(SOS.dll)>.NETのメモリ・リーク#mfaa3ea9]] **カーネル メモリ スペース [#y8c4f7b3] -Kernel Memory Space Analyzer~ http://www.microsoft.com/en-us/download/details.aspx?id=15877 >一般ユーザーのために設計されていないことに注意してください。カーネル・デバッガに既に精通しておりウィンドウズの内部についての知識を持っており、カーネル・モード・プログラムをデバッグする基礎的な技術を持っているユーザを想定しています。 **カーネル オブジェクトのハンドル [#gcedae15] ***タスクマネージャ [#i555696c] ***パフォーマンスカウンタ [#pa44bd4d] ***Sysinternals Handle [#q4430eba] カーネル オブジェクトのハンドル(リソースリーク)確認 -Windows Sysinternals > ダウンロード > プロセス > Handle~ http://technet.microsoft.com/ja-jp/sysinternals/bb896655~ このプログラムの GUI ベースのバージョンは、[[Process Explorer>#m8c2fc85]] **メモリ プール(ページ プールと非ページ プール) [#ge3f4778] ***タスクマネージャ、パフォーマンスカウンタ [#f74ed082] ***Memory Pool Monitor ユーティリティ (Poolmon.exe) [#yfbf1a63] ページ プールと非ページ プール、およびターミナル サービス セッション用に 使用されるメモリ プールからのメモリ割り当てに関してOSが収集するデータを表示する。~ これによりカーネルモードで動作するモジュール(ドライバ)のリーク問題を検出可能(必要に応じてgflagsを設定することで割り当ての際に、ドライバをある程度識別可能なTagが付与される)。 -Memory Pool Monitor (Poolmon.exe) を使用して~ カーネル モードのメモリ リークのトラブルシューティングを行う方法~ http://support.microsoft.com/kb/177415/ja -サードパーティ製のドライバによって使用されているプール タグの検索方法~ http://support.microsoft.com/kb/298102/ja -Pool tag list - The troubleshooters and problem solvers... - Site Home - TechNet Blogs~ http://blogs.technet.com/b/yongrhee/archive/2009/06/24/pool-tag-list.aspx ***WinDbg+Kdの!poolused拡張コマンド [#e6057348] ***Driver Verifier [#s2550e4c] プール・トラッキング機能を有効にした状態で(プールトラッキング機能は負荷があるので、本番に適用する場合は検証が必要) -カーネル メモリダンプや、 -完全メモリダンプで カーネル メモリ スペースをダンプ出力し、これを分析することでカーネルドライバの[[メモリ・リーク]]を確認する。 -Driver Verifier を使用して Windows ドライバをトラブルシューティングする方法~ http://support.microsoft.com/kb/244617/ja -Driver Verifier エラー検出用のドライバー開発者向けツール~ http://msdn.microsoft.com/ja-jp/windows/hardware/gg487310 ***Sysinternals Notmyfault [#t6e4b084] -仮想化した世界 Sysinternals 「Notmyfault」~ http://man-kato.blogspot.jp/2011/11/sysinternals-notmyfault.html >基本的にはブルースクリーンを発生させるためのツールであるが、この他にも、指定した増分値で非ページ プールまたはページ プールのいずれかにリークを発生させるオプションがある。 **[[デスクトップ・ヒープ]] [#wadec027] ***Desktop Heap Monitor [#va8e9eb5] -[[デスクトップ・ヒープ]]領域 - Desktop Heap Monitor~ http://yakushima-tonbo.com/windows/etc/dheapmon.html -How many application pools can you cope with~ Never doubt thy debugger - Site Home - MSDN Blogs~ http://blogs.msdn.com/b/carloc/archive/2008/08/11/how-many-application-pools-can-you-cope-with.aspx >Desktop Heap Monitorで、Service-0x0-3e7$\Default の情報が、Session 0 へログインしないと確認できない件。 ***Windbg+LiveKdの!dskheap拡張コマンド [#lcc18d3e] -Windows Sysinternals > ダウンロード > システム情報 > LiveKd~ http://technet.microsoft.com/ja-jp/sysinternals/bb897415 ***チューニング方針 [#r5985df9] 当該デスクトップのUsed Rateの合計が100%以下であれば他のデスクトップに影響を与えることは無い。しかし、余裕を持たせるため、当該デスクトップのUsed Rateの合計は、50-70%以下になるようにする。 ***チューニング方法 [#m9312988] -領域のサイズ変更を伴わないチューニング --USERオブジェクトなどのリークがあった場合は対応する。 --例外的に、サーバのSession0のインタラクティブ・ヒープが枯渇している場合~ サーバ上でサービスがLocalSystem アカウントで実行されていて、スタートアップ オプションの [デスクトップとの対話をサービスに許可] チェック ボックスがオンに(→ SERVICE_INTERACTIVE_PROCESS flag を含んでいる)なっているサービスでは、"Session0\Winsta0\Default"(インターラクティブ・ヒープ)が使用されるため、ここがリークする可能性がある。対応:必要に応じて、対話の許可を外すか、実行アカウントに任意のユーザアカウントを選択する。 -領域のサイズ変更を伴うチューニング --サーバのSession0のノン・インタラクティブ・ヒープが枯渇している場合 ---同時実行サービス数が多い~ 起動の度にウィンドウ・ステーションとセッション、対応するノン・インターラクティブ・ヒープが新規作成されるためノン・インターラクティブ・ヒープ用の残領域を使い切る場合がある。~ なお、Vista以降では、この問題は発生しない(自動的にサイズの拡張が行われる)。対応:必要に応じて、「全[[デスクトップ・ヒープ]]の容量」のサイズを大きくする。以下のレジストリ値の設定を変更する(MB単位)。~ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize ---ユーザサービスから多くのプロセスを起動しているシステム~ 子プロセスは親プロセスの設定を継承するため、同一のウィンドウ・ステーションとセッション、対応するノン・インターラクティブ・ヒープが使用される。~ このため、サービスから新たなプロセスを起動した場合、当該ノン・インターラクティブ・ヒープを使い切る場合がある。~ 対応:必要に応じて、「ノン・インターラクティブ・ヒープの容量」のサイズを大きくする。以下のレジストリ値のSharedSectionの3番目の値の設定を変更する。~ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionPoolSize~ SharedSectionの1番目:「標準ヒープの容量」のサイズ~ SharedSectionの2番目:「インターラクティブ・ヒープの容量」のサイズ ---ターミナル・サービスのデクストップ・ヒープが枯渇している場合~ ターミナル・サービスでは「全[[デスクトップ・ヒープ]]の容量」のサイズが小さめに設定されてている。~ これを拡大すると、ターミナル・サービスの同時接続可能セッション数を圧迫したりする可能性がある。(カーネル・メモリ領域を圧迫するため) -@IT:Windows TIPS > ターミナル・サービスでアプリケーションが正しく動かない~ http://www.atmarkit.co.jp/fwin2k/win2ktips/458ts2003err/ts2003err.html **USERオブジェクト、GDIオブジェクト [#b111a67e] -USERオブジェクト:[[デスクトップ・ヒープ]]を消費 -GDIオブジェクト:ページ プール、セッション プールを消費 ***タスクマネージャ [#bca6c2a3] ***Sysinternals Process Explorer [#rff09c9a] -Windows Sysinternals > ダウンロード > プロセス > Process Explorer~ http://technet.microsoft.com/ja-jp/sysinternals/bb896653 >GDIオブジェクトの数、また、GDIオブジェクトが消費するプールの上限値を確認できる(ただしWinDbgをインストールして、シンボルサーバを設定する必要がある)。 ***Sysinternals Testlimit [#w45888b4] -Download Testlimit.zip~ http://www.filerepair.ca/downloads/t/te/Testlimit.zip-DLL-EXE-Download-Testlimit.zip.html >Sysinternals の Testlimitユーティリティを実行すると、USERオブジェクト、GDIオブジェクト数の制限を~ 簡単に確認することができる(可能な限りまUSERオブジェクト、GDIオブジェクトを作成する)。 -infoq .NETのメモリリークに対処する~ http://www.infoq.com/jp/news/2009/11/Memory-Leaks-.NET >HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows~ USERProcessHandleQuotaとGDIProcessHandleQuotaには、ひとつのプロセスが利用できる。~ 最大のUSERオブジェクトとGDIオブジェクトの数が設定されている。デフォルトの値は 其々10,000。~ #1つのセッションで作成できる USERオブジェクト、GDIオブジェクト数に対する制限は 其々65,535 ***GDIView [#s10b541a] -View GDI handles/resources list and detect GDI leaks~ http://www.nirsoft.net/utils/gdi_handles.html *[[ダンプ取得に使用するツールの一覧]] [#j63663f8] ---- Tags: [[:Windows]], [[[:障害対応]], [[:性能]], [[:デバッグ]]