Avant la sortie du projet, le projet doit être soumis à des tests de résistance pour détecter les problèmes de performances du projet, tels que : le temps de réponse lent du projet, le nombre de requêtes que le projet peut résoudre à chaque fois Moins de goulots d'étranglement du projet, de données de requête de projet lentes et d'autres problèmes, une fois détectés, ils doivent être réglés. Cela signifie que si le temps de réponse de l'interface de votre projet dépasse dix secondes et qu'une série de mesures n'est pas prise, alors ceci Le. le projet a des problèmes, et le but du réglage des performances est de rendre le projet plus optimisé, RT (temps de réponse d'exécution) plus petit, TPS (débit - "requêtes reçues de la base de données par seconde) plus grand, etc.
Généralement, JMeter ou K8 seront utilisés dans les entreprises. Certaines entreprises construiront leur propre plate-forme de tests de résistance et effectueront des tests de résistance sur le projet après la rédaction du projet, elles définiront des exigences concernant le temps de réponse du projet. projet et définir les exigences du projet. Pour porter un jugement approximatif sur la base des données de la demande, les développeurs doivent écrire des interfaces basées sur ces exigences. Si le temps de réponse de l'interface dépasse les données établies et que le projet ne peut pas prendre en charge une demande aussi volumineuse, c'est le cas. nécessaire pour développer des bases de données, des conteneurs, des caches, etc. pour les aspects de réglage du projet et de son interface.
maxThreads Nombre maximum de threads : mesure le nombre de tâches que le serveur Web peut effectuer traiter simultanément
accepter-compter le nombre d'attente maximum : File d'attenteNombre d'attente maximum acceptable. Dépassé pour rejeter la demande.
Connexions maximales : le nombre maximum de connexions en même temps.
Lorsque le nombre de liens atteint le maximum, il continuera à demander et à attendre. Si l'attente maximale est dépassée, il sera rejeté.
Le nombre maximum de threads dans SpringBoot est de 200. Dans de nombreux cas, le nombre maximum de threads de 200 n'est pas suffisant. De manière générale, la configuration du serveur de 1cpu2G est définie sur 200 et la configuration du serveur de 4cpu8G est définie sur 800. , ce qui peut grandement améliorer le TPS et réduire le RT.
Modifiez le fichier de configuration 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 # 最大空闲连接数,防止突发流量
Confirmez que la configuration modifiée prend effet.
Vous pouvez utiliser la configuration dans SpringBoot. Ajoutez
# 暴露所有的监控点 management.endpoints.web.exposure.include: '*' # 定义Actuator访问路径 management.endpoints.web.base-path: /actuator # 开启endpoint 关闭服务功能 management.endpoint.shutdown.enabled: true
au fichier de configuration tout à l'heure pour vérifier que la configuration prend effet : ip:port/actuator
Recherchez tomcat
Network io est un fichier système qui lit et écrit io. Le système utilise NIO (haute performance, synchrone, non bloquant). En fait, NIO2 (ultra haute performance, asynchrone, non bloquant) a été intégré par défaut, mais vous. Vous devez appeler l'API NIO2, mais cette partie dépend du système. AIO (NIO2) dépend du système d'exploitation. Par exemple, Linux prend en charge AIO
En fait, AIO est une optimisation de NIO, qui améliore la prise en charge des fichiers. fonctionnalités de traitement et de système de fichiers. Une fois que le système utilise AIO, le temps de réponse sera réduit et stable.
Mettez directement dans la classe java dans le code du projet pour générer une classe de configuration 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; } }
Vérifiez que la configuration prend effet : ip:9003/calling interface
Explication : Tomcat dispose également d'un mode appelé apr. Activer automatiquement aio. Une autre méthode est utilisée ci-dessus, mais elle n'est généralement pas utilisée pour le réglage. Cette partie n'est qu'une compréhension préliminaire, car tous les systèmes ne prennent pas en charge AIO
Comme nous tous. vous le savez, Tomcat a été intégré à SpringBoot, mais en fait SpringBoot intègre trois types de serveurs : Tomcat (serveur mature, stable et hautes performances), développement Apache, Jetty (léger, rapide et flexible), Undertwo (hautes performances, hautes performances). flexibilité) .
Dans Spring Boot, Tomcat est utilisé par défaut comme serveur Web intégré. Vous pouvez également le configurer en conséquence dans le fichier de configuration et choisir d'utiliser Jetty ou Undertow.
Exclure Tomcat dans Spring-boot-starter-web
<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
Importer des démarreurs d'autres conteneurs
<!--导入undertow容器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
Configuration
# 设置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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!