ホームページ >Java >&#&チュートリアル >springboot の組み込み Tomcat によってサポートされる最大同時実行性の問題を解決する方法
SpringBoot の組み込み Tomcat、デフォルト設定では、Tomcat の最大スレッド数は 200 です、最大接続数は 10,000 です。デフォルトでは、サポートされる最大同時実行数は 10,000 です。これは、サポートされる接続の数を意味します。
1 (BIO)、1 つのスレッドは 1 つのソケット接続のみを処理します。 ,
2 は NIO で、1 つのスレッドが複数のソケット接続を処理します。
HTTP リクエストはそれほど時間がかからず、複数の接続は通常同時にメッセージを送信しないため、複数の接続を処理する単一のスレッドは通常、それほど大きな問題を引き起こしません。複数の接続を処理するスレッドは非常に遅くなり、タイムアウトになる可能性があります
server.tomcat.accept-count
: 待機中キューの長さ。割り当て可能なスレッドの数が使い果たされると、後続のリクエストは待機キューに入って待機します。待機キューがいっぱいになると、処理は拒否されます。デフォルトは 100 です。
server.tomcat.max-connections
: 最大接続数、デフォルトは 10000
server です。 tomcat.max-threads: 作業スレッドの最大数、デフォルトは 200、
server.tomcat.min-spare-threads: 作業スレッドの最小数thread 、割り当てられたスレッドの数を初期化します。デフォルトは 10
pro ファイルを変更します
server.port=7001 server.tomcat.accept-count=1000 server.tomcat.max-connections=10000 server.tomcat.max-threads=500 server.tomcat.min-spare-threads=100次に、プロジェクトをパッケージ化して再起動します
kill -9 9545 //Killプロセス##ps -ef | grep java //プロジェクトが開始されたポートを表示
pstree -p 7968 | wc -l //プロセス数を表示
構成ファイルを使用して、WebServerConfiguration.java ファイルを追加することもできます。
import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.stereotype.Component; //当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会吧此bean加载进spring容器中 @Component public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> { @Override public void customize(ConfigurableWebServerFactory configurableWebServerFactory) { //使用对应工厂类提供给我们的接口定制化我们的tomcat connector ((TomcatServletWebServerFactory)configurableWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接 protocol.setKeepAliveTimeout(30000); //当客户端发送超过10000个请求则自动断开keepalive链接 protocol.setMaxKeepAliveRequests(10000); } }); } }
備考:
MySQL データベースの QPS 容量の問題:#主キー クエリ: 数千万のデータ == 1 ~ 10 ミリ秒
非挿入更新および削除操作: 同じクエリ
#挿入操作: 1w~10w tps (構成の最適化に依存)
Tomcat の同時実行性のいくつかの方法を改善
3. データベース接続プール: データベース アクセスの同時パフォーマンスを数倍向上させることができる C3P0 の使用を推奨する人が多くいます。
4. Tomcat クラスターを使用すると、サーバーのパフォーマンスを最大化できます。より高い構成のサーバーに複数の Tomcat をデプロイすることも、複数のサーバーに個別に Tomcat をデプロイして、Apache と Tomcat を統合することもできます。 JK風。多数のユーザーに対するシステムの応答に関しては、Apache 3Tomccat クラスター > Apache 2Tomcat クラスター > Apache 統合 Tomcat > 単一 Tomcat であることが確認されています。また、Apache マルチ Tomcat クラスタ導入方式では、1 台の Tomcat がダウンしてもシステムは継続して利用できるため、ハードウェア システムの性能が十分に優れている場合には、ソフトウェアの性能を最大限に引き出す必要があります。 Tomcat クラスターを追加できます。
1. MPM (マルチ プロセッシング モジュール) を設定します。 ThreadPerChild, このパラメータは、各プロセスのスレッド数を設定するために使用されます。Windows 環境では、デフォルト値は 64 で、最大値は 1920 です。100 ~ 500 の間で設定することをお勧めします。サーバーのパフォーマンスが高い場合は、値は大きくなり、それ以外の場合は小さくなります。各子プロセスが処理できるリクエストの最大数は、MaxRequestPerChild パラメーターによって決まります。このパラメータの値は、サーバーのメモリに大きく依存します。メモリが比較的大きい場合は、大きなパラメータに設定できます。そうでない場合は、より小さい値を設定します。推奨値は 3000.
2 DNS と名前解決をオフにする HostnameLookups をオフにする
3. UseCanonicalName モジュールをオンにする UseCanonicalName on
4. 冗長モジュールをオフにする 一般的に、ロードする必要のないモジュールには以下のものがあります。 mod_include.so、mod_autoindex.so、および mod_access.so、mod_auth.so.
5. KeepAlive サポートをオンにする
KeepAlive をオン、KeepAliveTimeout 15 MaxKeepAliveRequests 1000
Based on実際の経験では、Apache および Tomcat クラスターによるシステム パフォーマンスの向上効果は非常に明白であり、この方法はハードウェア リソースの使用を最大化し、複数の Tomcat の処理を通じて単一の Tomcat の負荷を共有できます。
Web サーバーで許可される最大接続数は、オペレーティング システムのカーネル パラメーターの設定にも影響されますが、通常、Windows の場合は約 2,000、Linux の場合は約 1,000 です。
以上がspringboot の組み込み Tomcat によってサポートされる最大同時実行性の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。