この文書では、診断ツールを使用してヒープの検出を有効にする方法について記述しています。
背景
ヒープの破損は、誤ったアプリケーションのコーディングや、外部データの破損によって引き起こされます。
ヒープの破損により、IMAサービスが応答しなくなったりクラッシュしたりすることがあります。
通常ヒープの破損の効果は一定の時間が経過したあとに表れるため、各種存在する Hotfix の中で、原因となっているモジュール(Citrix 社製のモジュールまたは他社製のモジュール)を特定することが常に可能であるとは限りません。
ヒープの破損を発生時に検出するには、追加のランタイム診断ツール(「全ページヒープ」)を有効にします。この診断ツールを有効にすると、アプリケーションダンプが生成されます。
まず、Microsoft社の以下のWebサイトからDebugging Tools for Windowsをダウンロードしてインストールします。
Debugging Tools for Windows 32-bit version
注:x64 Windows上でも、IMAサービスは32ビットの実行ファイルなので、32ビットのDebugging Toolsからgflags.exeを実行する必要があります。
注:以下は、gflags.exe実行に関する説明です。コマンドラインからgflags.exeを実行する必要があるのみの場合、Citrixサーバー上にデバッグツールをインストールする必要はありません。デバッグツールをワークステーションまたはテストサーバー上にインストールして、インストールディレクトリからgflags.exeファイルのみをCitrixサーバーへコピーできます。
全ページヒープを有効にするには、以下のコマンドを実行します。
gflags /p /enable ImaSrv.exe /full
―または―
gflags /i ImaSrv.exe +hpa
gflagsでページヒープの検証が有効になっていることを確認するには、以下のコマンドを実行します。:
gflags.exe /p
―または―
gflags /i ImaSrv.exe
以下のメッセージが表示されます。
ImaSrv.exe: page heap enabled with flags (full traces)
―または―
Current Registry Settings for ImaSrv.exe executable are 02000000
ダンプが生成されると、パフォーマンスの低下を防ぐために全ページヒープは無効になります。
全ページヒープを無効にするには、以下のコマンドを実行します。
gflags /p /disable ImaSrv.exe
―または―
gflags /i ImaSrv.exe -hpa
全ページヒープが無効になっていることを確認するには、以下のコマンドを実行します。
gflags.exe /p
―または―
gflags /i ImaSrv.exe
以下のメッセージが表示されます。
No application has page heap enabled
―または―
Current Registry Settings for ImaSrv.exe executable are 00000000
gflags.exeのGUIインターフェイスを使用して、同様の作業を行うことができます。
WindowsにDebugging Toolsをインストールしたくない場合またはgflags.exeを使用する場合は、レジストリを直接修正することも可能です。
注:レジストリエディタの使用を誤ると、深刻な問題が発生する可能性があり、Windowsの再インストールが必要になることがあります。レジストリエディタは自己の責任と判断の範囲でご使用ください。
32ビットWindowsシステムの場合
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImaSrv.exe
64ビットWindowsシステムの場合
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImaSrv.exe
以下のレジストリキーの下に新しく2つのREG_DWORD値を作成します。
32ビットWindowsシステムの場合
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<processname>
x64ビットWindowsシステムの場合
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<processname>
以下のようになります。
名前: GlobalFlag
種類: REG_DWORD
値: 0x02000000
名前: PageHeapFlags
種類: REG_DWORD
値: 0x00000003
追加情報
ほかのアプリケーションに対して全ページヒープを有効にする場合は、「ImaSrv」をそのアプリケーションの名前に置き換えます。