特定のサーブレットまたは Web サービスにスレッドを予約するように tomcat を構成する方法はありますか? これはおそらく、サーブレット フィルターでプログラムによって実行できることを理解しています。
では、250 のサービス スレッドのデフォルト設定を使用し、そのうちの 20 を特定のサーブレット/Web サービス用に予約するとします。
たぶんこれは明らかに不可能です-もしそうなら、誰かが理由を説明してもらえますか?
Tomcat 6を使用しています。
特定のサーブレットまたは Web サービスにスレッドを予約するように tomcat を構成する方法はありますか? これはおそらく、サーブレット フィルターでプログラムによって実行できることを理解しています。
では、250 のサービス スレッドのデフォルト設定を使用し、そのうちの 20 を特定のサーブレット/Web サービス用に予約するとします。
たぶんこれは明らかに不可能です-もしそうなら、誰かが理由を説明してもらえますか?
Tomcat 6を使用しています。
サーブレット仕様では不可能です。ただし、Tomcat では、異なるポートで実行される複数のコネクタを定義できます。各コネクタには個別のスレッド プールがあります。
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="10443" />
server.xml
Tomcat のディレクトリの下のファイルにスレッド プールを構成する方法の例があります/conf
。
これで、8080 (デフォルト) と 8081 (上記で構成) の両方を使用して Web アプリケーションにアクセスできるようになりました。8081 までの要求は、別のスレッド プールを使用します。あとは、すべてのサーブレットを 8080 経由でルーティングし、特定のスレッドを 8081 経由でルーティングするだけです (完全に独立したスレッド プールを使用)。
誰かにこれを悪用されたくない場合は、サーブレット フィルターを追加して、要求された URI に基づいて正しいポートが使用されているかどうかを確認します。
ただし、あなたの理論的根拠を読んでください:
多くのサービス スレッドをロックする特定の同期サービスがあります。
スレッドの独自のプールを開始して管理し ( をExecutorService
参照)、非同期サーブレットを使用することをお勧めします。はるかにシンプルでポータブル。
なぜこれをしたいのですか?
Tomcat はスレッディングを適切に処理します。最大値に達した場合は、とにかく最大値を増やす必要があります。では、いくつかを予約するメリットは何でしょうか? 一部を予約するということは、より早く最大値に到達し、必要のないときに効率的に使用しないことを意味します。
要するに、これをしないでください。