目次
1. プロジェクトのパフォーマンス チューニングが必要な理由
2. サービスコンテナのパフォーマンスチューニング
2.1 SpringBoot でのカットスルー Tomcat のチューニング: スレッドの最大数の最適化
チューニング手順:
構成ファイル application.yml
ネットワーク IO は、システム ファイルの読み取りおよび書き込み IO です。システムは NIO (高パフォーマンス、同期、ノンブロッキング)、実際にはNIO2(超高性能、非同期、ノンブロッキング)がデフォルトで組み込まれていますが、NIO2 APIを呼び出す必要がありますが、この部分はシステム、AIOに基づいています(NIO2) は、Linux が AIO をサポートするなど、オペレーティング システムに依存します。
プロジェクト コードの Java クラスに直接配置し、Java 構成クラスを生成します
をサポートしているわけではないため、この部分は予備的な理解にすぎません。ご存知のとおり、SpringBoot には Tomcat が組み込まれていますが、実際には SpringBoot には3 種類のサーバーが組み込まれています: Tomcat (成熟した、安定した、高性能サーバー)、Apache 開発、Jetty (軽量、高速、柔軟)、Undertwo (高性能、高柔軟性)。
ホームページ Java &#&チュートリアル Javaサーバーコンテナのチューニング方法は何ですか?

Javaサーバーコンテナのチューニング方法は何ですか?

May 11, 2023 pm 11:37 PM
java サーバ

1. プロジェクトのパフォーマンス チューニングが必要な理由

プロジェクトをリリースする前に、プロジェクトのパフォーマンスの問題を検出するためにプロジェクトのストレス テストを行う必要があります。例: プロジェクトの応答時間が遅い、プロジェクトに問題が発生するたびに一度に解決できるリクエストの数が少ない、プロジェクトのボトルネック、プロジェクト データのクエリ時間が遅いなどは、検出後に調整する必要があります。つまり、プロジェクト インターフェイスの応答時間が 10 秒を超えると、解決できなくなります。一連の対策が必要な場合、このプロジェクトには問題があります。パフォーマンス チューニングの目的は、プロジェクトをより最適化し、RT (実行応答時間) を小さくし、TPS (スループット - データベースから受信したリクエストを) することです。 1秒あたり)が大きいなど。

一般的に企業では、JMeter または K8s が使用されます。企業によっては、独自のストレス テスト プラットフォームを構築することもあります。プロジェクトが作成された後、プロジェクトのストレス テストが行​​われます。プロジェクトが決定されると、プロジェクトの要求データを大まかに判断し、開発者はこれらの要件に基づいてインターフェイスを作成する必要があります。インターフェイスの応答時間が確立されたデータを超え、プロジェクトがそのような大きな要求をサポートできない場合、プロジェクトとプロジェクトのインターフェースはデータベース、コンテナのチューニング、キャッシュなどである必要があります。

2. サービスコンテナのパフォーマンスチューニング

2.1 SpringBoot でのカットスルー Tomcat のチューニング: スレッドの最大数の最適化

チューニング手順:

maxThreads最大スレッド数: Web サーバーが同時に処理できるタスクの数を測定します。

accept-count 最大待機数: Queue 受け入れることができる最大待機数。要求を拒否するには超過しました。

最大接続数: 同時に接続できる最大接続数。

リンク数が最大の場合はリクエストを続けてウェイトに入りますが、最大ウェイトを超えると拒否されます。

SpringBoot の最大スレッド数は 200 です。多くの場合、最大スレッド数 200 では不十分です。一般的に、1cpu2G のサーバー構成は 200 に設定され、サーバー構成は 200 に設定されます。 4cpu8G の値は 800 に設定されています。これにより、TPS が大幅に向上し、RT

が削減されます。 設定のチューニング

構成ファイル application.yml
# Tomcat的 maxConnections、maxThreads、acceptCount三大配置,
#分别表示最大连接数,最大线程数、最大的等待数,可以通过application.yml配置文件来改变这个三个值,一个标
#准的示例如下:
server.tomcat.uri-encoding: UTF-8
# 思考问题:一台服务器配置多少线程合适?
server.tomcat.accept-count: 1000 # 等待队列最多允许1000个请求在队列中等待
server.tomcat.max-connections: 20000 # 最大允许20000个链接被建立
## 最大工作线程数,默认200, 4核8g内存,线程数经验值800
server.tomcat.threads.max: 800 # 并发处理创建的最大的线程数量
server.tomcat.threads.min-spare: 100 # 最大空闲连接数,防止突发流量
ログイン後にコピー

を変更します。変更した構成が有効であることを確認します。

この設定は SpringBoot で使用できます。今すぐ設定ファイルに

# 暴露所有的监控点
management.endpoints.web.exposure.include: '*'
# 定义Actuator访问路径
management.endpoints.web.base-path: /actuator
# 开启endpoint 关闭服务功能
management.endpoint.shutdown.enabled: true
ログイン後にコピー

    を追加して、設定が有効になっていることを確認します: ip:port/actuator
  • Search tomcat
  • 2.2 ネットワーク IO モデルのチューニング

ネットワーク IO は、システム ファイルの読み取りおよび書き込み IO です。システムは NIO (高パフォーマンス、同期、ノンブロッキング)、実際にはNIO2(超高性能、非同期、ノンブロッキング)がデフォルトで組み込まれていますが、NIO2 APIを呼び出す必要がありますが、この部分はシステム、AIOに基づいています(NIO2) は、Linux が AIO をサポートするなど、オペレーティング システムに依存します。

実際、AIO は NIO を最適化したもので、ファイル処理とファイル システム機能のサポートを強化します。システムが AIO を使用すると、応答時間が短縮され、安定します。

設定のチューニング

プロジェクト コードの Java クラスに直接配置し、Java 構成クラスを生成します
@Configuration
    public class TomcatConfig {
        //自定义SpringBoot嵌入式Tomcat
        @Bean
        public TomcatServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new
                TomcatServletWebServerFactory() {};
            tomcat.addAdditionalTomcatConnectors(http11Nio2Connector());
            return tomcat;
        }
        //配置连接器nio2
        public Connector http11Nio2Connector() {
            Connector connector=new
                Connector("org.apache.coyote.http11.Http11Nio2Protocol");
            Http11Nio2Protocol nio2Protocol = (Http11Nio2Protocol)
                                               connector.getProtocolHandler();
            //等待队列最多允许1000个线程在队列中等待
            nio2Protocol.setAcceptCount(1000);
            // 设置最大线程数
            nio2Protocol.setMaxThreads(1000);
            // 设置最大连接数
            nio2Protocol.setMaxConnections(20000);
            //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接
            nio2Protocol.setKeepAliveTimeout(30000);
            //当客户端发送超过10000个请求则自动断开keepalive链接
            nio2Protocol.setMaxKeepAliveRequests(10000);
            // 请求方式
            connector.setScheme("http");
            connector.setPort(9003); //自定义的端口,与源端口9001可以共用,知识改了连接器而已
            connector.setRedirectPort(8443);
            return connector;
        }
    }
ログイン後にコピー

    構成が有効であることを確認します: ip:9003/ インターフェイスの呼び出し
  • 注: Tomcat には apr と呼ばれるモードもあり、これにより aio が自動的にオンになります。上記のメソッドは別のメソッドを使用していますが、通常、これは次の目的には使用されません。すべてのシステムが AIO

2.3 Container Optimization Tomcat Upgrade Undertow

をサポートしているわけではないため、この部分は予備的な理解にすぎません。ご存知のとおり、SpringBoot には Tomcat が組み込まれていますが、実際には SpringBoot には3 種類のサーバーが組み込まれています: Tomcat (成熟した、安定した、高性能サーバー)、Apache 開発、Jetty (軽量、高速、柔軟)、Undertwo (高性能、高柔軟性)。

Spring Boot では、デフォルトで Tomcat が組み込み Web サーバーとして使用されますが、構成ファイルでそれに応じて構成し、Jetty または Undertow の使用を選択することもできます。

設定操作プロセス:

    spring-boot-starter-web で Tomcat を除外する
  • <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>
    </dependency
    ログイン後にコピー
  • 他のコンテナのスターターをインポートする
<!--导入undertow容器依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
ログイン後にコピー

    構成
  • # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接
    server.undertow.threads.io: 800
    # 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
    # 默认值是IO线程数*8
    server.undertow.threads.worker: 8000
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小越小,空间就被利用的越充分,不要设置太大,以免影响其他应用,合适即可
    server.undertow.buffer-size: 1024
    # 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
    # 是否分配的直接内存(NIO直接分配的堆外内存)
    server.undertow.direct-buffers: true
    ログイン後にコピー

    以上がJavaサーバーコンテナのチューニング方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Javaの平方根

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Javaの完全数

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーター

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Javaのアームストロング数

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

ジャワのウェカ

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Javaのスミス番号

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

Java Springのインタビューの質問

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8 Stream Foreachから休憩または戻ってきますか?

See all articles