Sebelum projek dikeluarkan, projek perlu diuji tekanan untuk mengesan masalah prestasi projek setiap Masalah seperti bilangan permintaan yang kecil yang boleh diselesaikan pada satu masa, kesesakan projek, dan masa pertanyaan data projek yang perlahan perlu ditala selepas pengesanan Ini bermakna jika masa tindak balas antara muka projek anda melebihi sepuluh saat, anda akan melakukannya tidak membuat sebarang pelarasan. Satu siri langkah, maka terdapat masalah dengan projek ini Tujuan penalaan prestasi adalah untuk menjadikan projek lebih optimum, RT (masa tindak balas berjalan) lebih kecil, dan TPS (permintaan yang diterima daripada. pangkalan data sesaat) lebih besar dsb.
Secara amnya dalam perusahaan, JMeter atau K8s akan digunakan beberapa perusahaan akan membina platform ujian tekanan mereka sendiri dan menjalankan ujian tekanan pada projek selepas projek itu ditulis, masa tindak balas projek akan diukur Keperluan, membuat pertimbangan kasar pada data permintaan projek, dan pembangun mesti menulis antara muka berdasarkan keperluan ini Jika masa tindak balas antara muka melebihi data yang ditetapkan, dan projek itu tidak dapat menyokong permintaan yang begitu besar, adalah perlu untuk menjalankan analisis pangkalan data dan projek pada antara muka projek dan projek.
Bilangan utas maksimum maxThreads: mengukur bilangan tugasan yang boleh diproses oleh pelayan web secara serentak
bilangan tunggu maksimum kiraan terima: Baris gilirBilangan maksimum menunggu yang boleh diterima. Melebihi menolak permintaan itu.
Sambungan Maks: Bilangan sambungan maksimum pada masa yang sama.
Apabila bilangan pautan mencapai maksimum, ia akan terus meminta dan memasuki masa menunggu Jika melebihi tempoh maksimum, permintaan akan ditolak.
Bilangan maksimum utas dalam SpringBoot ialah 200. Dalam kebanyakan kes, bilangan maksimum utas 200 tidak mencukupi Secara umumnya, konfigurasi pelayan 1cpu2G ditetapkan kepada 200, dan konfigurasi pelayan daripada 4cpu8G ditetapkan kepada 800. Ia boleh meningkatkan TPS dan mengurangkan RT.
Ubah suai aplikasi fail konfigurasi.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 # 最大空闲连接数,防止突发流量
Sahkan bahawa konfigurasi yang diubah suai berkuat kuasa.
Anda boleh menggunakan konfigurasi dalam SpringBoot Tambah
# 暴露所有的监控点 management.endpoints.web.exposure.include: '*' # 定义Actuator访问路径 management.endpoints.web.base-path: /actuator # 开启endpoint 关闭服务功能 management.endpoint.shutdown.enabled: true
pada fail konfigurasi sebentar tadi untuk menyemak sama ada konfigurasi berkuat kuasa: ip:port/actuator
Cari tomcat
Rangkaian io ialah sistem membaca dan menulis io prestasi, Segerak, tidak menyekat), sebenarnya, NIO2 (prestasi ultra tinggi, tak segerak, tidak menyekat) telah dibenamkan secara lalai, tetapi anda perlu memanggil API NIO2, tetapi bahagian ini berdasarkan sistem, AIO (NIO2) bergantung pada sistem pengendalian, seperti Linux menyokong AIO
Malah, AIO ialah pengoptimuman NIO, yang meningkatkan sokongan untuk pemprosesan fail dan ciri sistem fail. Selepas sistem menggunakan AIO, masa tindak balas akan dikurangkan dan stabil.
Masukkan terus ke dalam kelas java dalam kod projek untuk menjana kelas konfigurasi 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; } }
Pastikan konfigurasi berkuat kuasa: ip:9003/ Antara muka panggilan
Nota: Tomcat juga mempunyai mod yang dipanggil apr, yang secara automatik menghidupkan aio Kaedah di atas menggunakan kaedah lain, tetapi secara amnya ini tidak digunakan untuk penalaan. Bahagian ini hanya Buat pemahaman awal, kerana tidak semua sistem menyokong AIO
Seperti yang kita semua tahu, SpringBoot telah membenamkan Tomcat, tetapi sebenarnya SpringBoot mempunyai tiga jenis daripada pelayan yang dibenamkan: Tomcat (pelayan matang, stabil, berprestasi tinggi), pembangunan apache, Jeti (ringan, pantas dan fleksibel), Undertwo (prestasi tinggi, fleksibiliti tinggi).
Dalam Spring Boot, Tomcat digunakan sebagai pelayan web terbina dalam secara lalai Anda juga boleh mengkonfigurasinya dengan sewajarnya dalam fail konfigurasi dan memilih untuk menggunakan Jetty atau Undertow.
Kecualikan tomcat dalam 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
Import starter bagi bekas lain
<!--导入undertow容器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
Konfigurasi
# 设置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
Atas ialah kandungan terperinci Apakah kaedah untuk penalaan kontena pelayan java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!