Tomcat terbina dalam SpringBoot, dalam tetapan lalai, bilangan maksimum utas Tomcat ialah 200, dan bilangan maksimum sambungan Ia adalah 10,000. Secara lalai, konkurensi maksimum yang disokong ialah 10,000, yang bermaksud bilangan sambungan yang disokong
1, iaitu BIO dan satu utas hanya memproses satu Sambungan Soket ,
2, ialah NIO, satu benang mengendalikan berbilang sambungan Soket.
Satu benang yang mengendalikan berbilang sambungan biasanya tidak menyebabkan terlalu banyak masalah kerana permintaan HTTP tidak terlalu memakan masa dan berbilang sambungan biasanya tidak menghantar mesej pada masa yang sama. Benang memproses berbilang sambungan akan menjadi sangat perlahan dan mungkin tamat masa
server.tomcat.accept-count
: Panjang gilir menunggu, apabila benang yang boleh diperuntukkan Selepas nombor adalah digunakan, permintaan seterusnya akan memasuki baris gilir menunggu Apabila baris gilir menunggu penuh, pemprosesan akan ditolak.
server.tomcat.max-connections
: Bilangan maksimum sambungan, lalai 10000
server.tomcat.max-threads
: Bilangan maksimum rangkaian pekerja, lalai 200,
server.tomcat.min-spare-threads
: Bilangan minimum utas pekerja, nombor utas peruntukan awal, lalai 10
Di bawah konfigurasi lalai, penolakan sambungan akan berlaku selepas bilangan sambungan melebihi 10,000 Situasi
Di bawah konfigurasi lalai, pemprosesan akan ditolak selepas permintaan yang dicetuskan melebihi 200+100 (bilangan maksimum rangkaian pekerja + panjang gilir menunggu)
Jika lalai konfigurasi tidak dapat memenuhi keperluan semasa, anda boleh menalanya sendiri atau Ubah suai konfigurasi secara manual untuk mengendalikan concurrency
Ubah suai fail 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
Kemudian bungkus dan mulakan semula projek
bunuh -9 9545 //Bunuh proses
ps -ef | grep java //Lihat port yang dimulakan oleh projek
pstree -p 7968 | -l //Semak bilangan proses
Kami juga boleh Menggunakan fail konfigurasi, anda boleh menambah fail 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); } }); } }
Catatan:
Masalah kapasiti QPS pangkalan data MySQL:
Pertanyaan kunci utama: berpuluh juta data == 1-10 ms
Pertanyaan indeks unik: berpuluh juta data == 10-100 ms
Pertanyaan indeks bukan unik: Data peringkat juta == 100-1000ms
Tiada data indeks: Data peringkat juta == 1000ms+
Masalah kapasiti TPS pangkalan data MySQL:
Kendalian kemas kini dan pemadaman tidak memasukkan: Pertanyaan yang sama
Kendalian sisipan: 1w~ 10w tps (bergantung pada pengoptimuman konfigurasi)
1. Apache + Tomcat digabungkan untuk menggunakan Apache untuk halaman statik dan Tomcat untuk halaman dinamik , dan pada masa yang sama mengurangkan masa tamat masa sambungan untuk menghadapi situasi di mana terdapat terlalu banyak konkurensi dan sudah terlambat untuk kitar semula benang.
2. Untuk menyelesaikan masalah tekanan yang berlebihan, penyeimbangan beban boleh dilakukan TOMCAT tidak dapat mengendalikan beban benang yang begitu banyak, dan jika JVM terlalu besar, kos pengurusan memorinya akan meningkat dengan ketara. Pendekatan yang lebih munasabah dan saintifik ialah menggunakan memori 2GB dan mengkonfigurasi 3 hingga 4 kejadian TOMCAT, setiap satu dengan memori 512MB.
3. Ramai orang mengesyorkan menggunakan C3P0, yang boleh meningkatkan prestasi serentak akses pangkalan data beberapa kali.
4. Penggunaan kelompok Tomcat boleh memaksimumkan prestasi pelayan Anda boleh menggunakan berbilang Tomcat pada pelayan dengan konfigurasi yang lebih tinggi, atau anda boleh menggunakan Tomcat pada berbilang pelayan secara berasingan, menyepadukan Apache dan Tomcat cara. Ia telah disahkan bahawa dari segi respons sistem kepada sejumlah besar pengguna, kumpulan Apache+3Tomccat > Apache+2Tomcat gugusan > Dan apabila menggunakan kaedah penggunaan Apache + beberapa kluster Tomcat, jika satu Tomcat turun, sistem boleh terus digunakan Oleh itu, apabila prestasi sistem perkakasan cukup unggul, anda perlu memaksimumkan prestasi perisian. dan anda boleh menggunakan kaedah menambah kelompok Tomcat.
1. Konfigurasikan MPM (Modul Pemprosesan Berbilang). ThreadPerChild, parameter ini digunakan untuk menetapkan bilangan utas untuk setiap proses Dalam persekitaran Windows, nilai lalai ialah 64 dan nilai maksimum ialah 1920. Adalah disyorkan untuk menetapkannya antara 100-500 Jika prestasi pelayan adalah tinggi. nilai akan menjadi lebih besar, jika tidak ia akan menjadi lebih kecil. Bilangan maksimum permintaan yang boleh dikendalikan oleh setiap proses anak ditentukan oleh parameter MaxRequestPerChild. Nilai parameter ini lebih bergantung pada memori pelayan Jika memori agak besar, ia boleh ditetapkan kepada parameter besar Jika tidak, tetapkan nilai yang disyorkan ialah 3000.
2 . Matikan DNS dan resolusi nama HostnameLookups
3 Hidupkan modul UseCanonicalName UseCanonicalName
4 .so, mod_autoindex.so, dan mod_access, mod_auth.so.
5 Hidupkan sokongan KeepAlive
KeepAlive dihidupkan, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
Actual. pengalaman, meningkatkan prestasi sistem melalui kluster Apache dan Tomcat Kesannya sangat jelas Kaedah ini boleh memaksimumkan penggunaan sumber perkakasan dan berkongsi tekanan Tomcat tunggal melalui pemprosesan berbilang Tomcats.
Bilangan maksimum sambungan yang dibenarkan oleh pelayan web juga tertakluk kepada tetapan parameter kernel sistem pengendalian Biasanya ia adalah kira-kira 2,000 untuk Windows dan kira-kira 1,000 untuk Linux.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah konkurensi maksimum yang disokong oleh tomcat terbina dalam springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!