呼び出しを Tomcat にスケーリングする必要があり、内部でスレッドを起動することが提案されています。誰かがこれを行う必要がありましたか? もしそうなら、彼らはどのような解決策を思いつきましたか?
6 に答える
アプリケーション サーバー内に独自のスレッドを作成することは、通常、サーバーがスケーラビリティを向上させるためにスレッドを管理する必要があるため、推奨されません。また、セキュリティ情報 (認証されたサブジェクトなど) など、スレッド コンテキストで利用できるものについてコンテナーが仮定を行う場合にも、問題が発生する可能性があります。これは通常、スレッドを生成し、そのスレッドからコンテナに認識されていないサーバー リソースを使用する場合に発生します。
Tomcat からコンテナー管理スレッドを取得する方法があるかどうかを確認してください。WebLogic と WebSphere は commonj.WorkManager をサポートしています。これにより、コンテナー管理スレッドでの作業をスケジュールできます。Spring も commonj を使用できますが、そのサポートが Tomcat で利用できるかどうかはわかりません。
あなたの質問は少しあいまいです。Tomcat 自体は、すでにスレッド プールを使用して HTTP 要求を処理しています。Tomcat の設定を介してスレッドの数を増やすことができます。詳細については、Tomcat wiki を参照してください。
コード内でスレッドを起動したい場合は、Java 5 で導入された java.util.concurrent API を熟読することをお勧めします。また、この件に関するテキストである「Java Concurrency in Practice」もお読みください。
特別な必要がない限り、Web アプリケーション内からスレッドを実際に起動するべきではありません。問題の詳細がなければ、これが問題を解決するための正しいアプローチであるかどうかを判断するのは困難です。
Quartzをご覧になることをお勧めします。これは、「ほぼすべての J2EE または J2SE アプリケーションと統合したり、一緒に使用したりできるフル機能のオープン ソース ジョブ スケジューリング システムです」。
スレッドで解決しようとしている問題は何ですか?
実行時間の長いタスクがある場合は、JMS と完全な Java EE コンテナーを使用する必要があります。
過剰な負荷を処理しようとする場合は、2 つの tomcat インスタンスを考慮することができますが、http セッションを使用している場合は、セッションのレプリケーションを調査する必要があります。
Tomcat を使用せざるを得ない場合は、.NET で Executors フレームワークを使用することを検討してくださいjava.util.concurrency
。
他の人が尋ねたように、何を達成しようとしているのかについて、より詳細な情報を提供する必要があります。
それ以外の場合、Tomcat はスレッド プールを使用します。プール内のスレッド数を増やします。新しいバージョンの tomcat -- 6.x を使用してください。Java 6.0_10 を使用します。必要に応じて、プロファイラーを使用してアプリケーションを調整し、必要に応じて JVM 設定を調整します。