Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan masalah konkurensi maksimum yang disokong oleh tomcat terbina dalam springboot

Bagaimana untuk menyelesaikan masalah konkurensi maksimum yang disokong oleh tomcat terbina dalam springboot

WBOY
WBOYke hadapan
2023-05-22 20:21:503564semak imbas

    Tomcat terbina dalam springboot menyokong jumlah maksimum konkurensi

    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

    Tomcat mempunyai dua mod untuk memproses sambungan

    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

    Konfigurasi Tomcat terbenam lalai

    • 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)

    Beberapa cara untuk meningkatkan konkurensi tomcat

    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!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam