Sun Java System Application Server Enterprise Edition 8.2 パフォーマンスチューニングガイド

代替スレッドの使用

Solaris オペレーティング環境では、デフォルトで 2 レベルのスレッドモデルがサポートされます (Solaris 8 まで)。アプリケーションレベルの Java スレッドは、ユーザーレベルの Solaris スレッドにマッピングされ、制限のある軽量プロセス (LWP) プール上で多重化されます。カーネルリソースを維持し、システムの効率を最大にするには、システムのプロセッサと同じ数の LWP があれば十分です。これは、ユーザーレベルのスレッドが何百もある場合に役立ちます。JVM に応じて、複数のスレッドモデルか、モデル内での複数の同期メソッドのどちらかを選択できます。

Solaris 8 で、LD_LIBRARY_PATH/usr/lib の前に /usr/lib/lwp を挿入して、/usr/lib/lwp/ にある代替スレッド libthread.so を読み込んでみてください。一部のアプリケーションでは、特に、使っているスレッドが少ない場合は、スループットとシステム利用率が向上します。

デフォルトでは、Application Server は /usr/lib/lwp を使用します。デフォルトの設定を変更して LWP を使わないようにするには、startserv スクリプトの LD_LIBRARY_PATH から /usr/lib/lwp を削除します。ただし、本当に必要な場合以外は変更しないでください。

多数のスレッドを使うアプリケーションには、/usr/lib/libthread.so ライブラリの使用をお勧めします。これにより、1.4 のデフォルトである LWP ベースの同期が有効になるだけでなく、TLABS (スレッドローカル割り当てバッファー) が無効になるため、ヒープがすぐに使い果たされてガベージコレクションが頻繁に行われる可能性があります。多数のスレッドを使用するアプリケーションでは -Xconcurrentio の使用方法も参照してください。

詳細情報

Solaris のスレッドに関する問題の詳細については、「Solaris and Java Threading」を参照してください。

HotSpot JVM のチューニングの詳細については、「詳細情報」を参照してください。