HOWTO: Windows上のWrapperで複数のサービスを動作させる方法 |
|||||||||||||
Windows上でWrapperをインストールしてサービスを開始すると、 複数のサービスを開始できない、という問題に遭遇する場合があります。 その場合の通常の表示メッセージは:
各サービスでは、APIエレメントなどを保存するのに利用する内部デスクトップヒープ領域から、一定量のメモリを割り当てています。 内部デスクトップヒープに関する説明は、外部サイトをご覧ください。 もしサービスが非対話サービスとして起動されると、WindowsXP 32ビット版上で、ヒープ量はデフォルトで512KBです。 Wrapper自体では、開始時に各インスタンスごとに、およそ10-15KBを割り当てます。 各JVMでもまた、およそ20KBを割り当てますが、この値はJVMが読み込むAPIエレメント次第で異なります。 もしサービスの開始時にヒープ領域が枯渇した場合、結果として上記のようなエラーが発生することがあります。 マイクロソフトから提供されている 『デスクトップヒープモニター』 ツールで、デスクトップヒープを診断することができます。 インストールして設定した出力は、このように見えるはずです:
非対話サービスは、SYSTEMユーザーとして動作しますが、 この例の場合、Service-0x0-3e7$\Defaultに属します。 さらに非対話サービスを(SYSTEMユーザーとして)開始すると、徐々にヒープ利用量が増加します。 対話サービスとして動作しているサービスでは、WinSta0\Defaultヒープ利用量が増加します。 あるユーザーアカウントでサービスを利用すると、そのプロセス用に新しく WinStation\Desktopセッションを作成します。 そのユーザーとして動作するサービスは、どれでも実際には自身のセッションを受信します。 現在のところ2つの回避策があります:
Windows 64ビット版では、非常に大きなデスクトップヒープ領域があるため、 最終的に限界に達するには大量に同時にサービスと動作させる必要があります。 |