プロジェクトをリリースする前に、プロジェクトのパフォーマンスの問題を検出するためにプロジェクトのストレス テストを行う必要があります。例: プロジェクトの応答時間が遅い、プロジェクトに問題が発生するたびに一度に解決できるリクエストの数が少ない、プロジェクトのボトルネック、プロジェクト データのクエリ時間が遅いなどは、検出後に調整する必要があります。つまり、プロジェクト インターフェイスの応答時間が 10 秒を超えると、解決できなくなります。一連の対策が必要な場合、このプロジェクトには問題があります。パフォーマンス チューニングの目的は、プロジェクトをより最適化し、RT (実行応答時間) を小さくし、TPS (スループット - データベースから受信したリクエストを) することです。 1秒あたり)が大きいなど。
一般的に企業では、JMeter または K8s が使用されます。企業によっては、独自のストレス テスト プラットフォームを構築することもあります。プロジェクトが作成された後、プロジェクトのストレス テストが行われます。プロジェクトが決定されると、プロジェクトの要求データを大まかに判断し、開発者はこれらの要件に基づいてインターフェイスを作成する必要があります。インターフェイスの応答時間が確立されたデータを超え、プロジェクトがそのような大きな要求をサポートできない場合、プロジェクトとプロジェクトのインターフェースはデータベース、コンテナのチューニング、キャッシュなどである必要があります。
maxThreads最大スレッド数: Web サーバーが同時に処理できるタスクの数を測定します。
accept-count 最大待機数: Queue 受け入れることができる最大待機数。要求を拒否するには超過しました。
最大接続数: 同時に接続できる最大接続数。
リンク数が最大の場合はリクエストを続けてウェイトに入りますが、最大ウェイトを超えると拒否されます。
SpringBoot の最大スレッド数は 200 です。多くの場合、最大スレッド数 200 では不十分です。一般的に、1cpu2G のサーバー構成は 200 に設定され、サーバー構成は 200 に設定されます。 4cpu8G の値は 800 に設定されています。これにより、TPS が大幅に向上し、RTが削減されます。 設定のチューニング
# 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
実際、AIO は NIO を最適化したもので、ファイル処理とファイル システム機能のサポートを強化します。システムが AIO を使用すると、応答時間が短縮され、安定します。
設定のチューニング
@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; } }
2.3 Container Optimization Tomcat Upgrade Undertow
Spring Boot では、デフォルトで Tomcat が組み込み Web サーバーとして使用されますが、構成ファイルでそれに応じて構成し、Jetty または Undertow の使用を選択することもできます。
設定操作プロセス:
<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 サイトの他の関連記事を参照してください。