ホームページ >Java >&#&チュートリアル >springboot の組み込み Tomcat によってサポートされる最大同時実行性の問題を解決する方法

springboot の組み込み Tomcat によってサポートされる最大同時実行性の問題を解決する方法

WBOY
WBOY転載
2023-05-22 20:21:504069ブラウズ

    springboot の組み込み Tomcat は最大同時実行性をサポートします

    SpringBoot の組み込み Tomcat、デフォルト設定では、Tomcat の最大スレッド数は 200 です、最大接続数は 10,000 です。デフォルトでは、サポートされる最大同時実行数は 10,000 です。これは、サポートされる接続の数を意味します。

    Tomcat には、接続を処理するための 2 つのモードがあります。

    1 (BIO)、1 つのスレッドは 1 つのソケット接続のみを処理します。 ,

    2 は NIO で、1 つのスレッドが複数のソケット接続を処理します。

    HTTP リクエストはそれほど時間がかからず、複数の接続は通常同時にメッセージを送信しないため、複数の接続を処理する単一のスレッドは通常、それほど大きな問題を引き起こしません。複数の接続を処理するスレッドは非常に遅くなり、タイムアウトになる可能性があります

    デフォルトの組み込み Tomcat 構成

    • server.tomcat.accept-count : 待機中キューの長さ。割り当て可能なスレッドの数が使い果たされると、後続のリクエストは待機キューに入って待機します。待機キューがいっぱいになると、処理は拒否されます。デフォルトは 100 です。

    • server.tomcat.max-connections: 最大接続数、デフォルトは 10000

    • server です。 tomcat.max-threads: 作業スレッドの最大数、デフォルトは 200、

    • server.tomcat.min-spare-threads: 作業スレッドの最小数thread 、割り当てられたスレッドの数を初期化します。デフォルトは 10

    デフォルト設定では、接続数が 10,000 を超えると接続は拒否されます

    デフォルト設定では、トリガーされたリクエストの数が 200 を超えます。100 個の拒否処理後 (ワーカー スレッドの最大数と待機キューの長さ)

    デフォルト設定が現在のニーズを満たせない場合は、自分で調整して手動で変更できます。同時処理の構成

    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 ミリ秒
    • 一意のインデックス クエリ: 千万レベルのデータ == 10 ~ 100 ミリ秒
    • 非一意のインデックス クエリ: 1,000 万レベルのデータ == 100 ~ 1000 ミリ秒
    • インデックス データなし: 100 万レベルのデータ == 1000 ミリ秒
    • #MySQL データベースの TPS 容量の問題:

    非挿入更新および削除操作: 同じクエリ

    • #挿入操作: 1w~10w tps (構成の最適化に依存)

    • Tomcat の同時実行性のいくつかの方法を改善

    • 1. Apache Tomcat を組み合わせて使用​​します。静的ページには Apache、動的ページには Tomcat を使用します。同時に、同時実行性が高く、スレッドのリサイクルが遅すぎる状況に対処するために、connectionTimeout 時間が短縮されます。

    2. 過剰な負荷の問題については、負荷分散を行うことができますが、TOMCAT はいずれにせよそれほど多くのスレッド負荷を処理できず、JVM が大きすぎる場合、メモリ管理コストが大幅に増加します。より合理的で科学的なアプローチは、2 GB のメモリを使用し、それぞれが 512 MB のメモリを持つ 3 ~ 4 つの 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 サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。