Pemeriksaan harian mendapati gc penuh yang kerap
Gc penuh yang kerap
Analisis fail dump:
Mulakan secara setempat dan menghasilkan semula jenis Penggunaan memori ini, jadi saya memulakan perkhidmatan tempatan dengan memori biasa dan aplikasi bermasalah, dan menganalisis perbandingan memori
tetapi anda tidak dapat mengetahui sebabnya hanya dengan melihatnya Pada masa ini, saya memberi perhatian kepada kumpulan benang dalam sudut kiri bawah. Kumpulan benang ini adalah kumpulan benang Metrik Metrik digunakan oleh Hystrix untuk mengira penunjuk yang berkaitan untuk papan pemuka atau penggunanya sendiri, untuk memahami Fungsi pemutus litar parameter dan penunjuk
Melihat tindanan sekali lagi, logik untuk sampai ke sini ialah tatasusunan panjang Histogram melaksanakan kesan seperti tetingkap gelongsor untuk mengira penunjuk dalam satu unit masaHistogram sendiri digunakan oleh Hystrix untuk melaksanakan fungsi yang serupa dengan baldi + tetingkap gelongsor untuk mengira trafik dalam masa unit Walau bagaimanapun, kerana parameter penunjuk dihidupkan, ia menyebabkan Untuk mengira penunjuk dalam julat masa yang lebih panjang, hystrix telah menambah objek baharu yang memegang lebih banyak rujukan Histogram (unit masa. ) untuk pengagregatan. Oleh kerana rujukan ini digunakan untuk mengira tempoh julat masa yang lebih lama, ia akan dipengaruhi oleh masa penahanan rujukan itu mencapai usia tua, tetapi intipatinya bukanlah kebocoran memori, jadi ia boleh dikitar semula selepas setiap gc penuh.
Selesaikan masalah
Selepas menemui penyelesaian dan mengesahkannya pada masa itu, saya tidak sempat mengkaji sebab konfigurasi lalai hystrix.metrics.enabled adalah benar tetapi aplikasi lain tidak mempunyai masalah gc penuh ini, selesaikan dahulu, dan kemudian teruskan tindakan susulan untuk menyiasat punca utama untuk mengelakkan masalah yang sama daripada berlaku dalam projek lain
didayakan, terutamanya bergantung pada hystrix.metrics.enabled, tetapi lalainya adalah benar projek tidak didayakan?
Selepas mencari kod sumber, pembukaan kelas ini berkaitan dengan anotasi
Selepas membandingkan kod, ternyata hanya aplikasi yang tidak normal gunakan anotasi ini. Tujuan anotasi ini adalah untuk menghidupkan pemutus litar
Walau bagaimanapun, selepas penyelidikan, didapati tanpa menggunakan anotasi ini, fungsi seperti pemutus litar masih tersedia versi spring-cloud, spring menggunakan hystrix untuk merangkum openfeign Daripada menyepadukan keseluruhan sistem hystrix, spring-cloud mungkin juga menemui masalah dengan penggunaan memori hystrix
Jadi dalam versi yang lebih tinggi (sekurang-kurangnya versi kami), feign dihidupkan dan dimatikan melalui pemutus Litar feign.hystrix.enabled (jika suis ini dimatikan, hanya menambah anotasi @EnableCircuitBreaker pada pemutus litar tidak akan berkuat kuasa)
Malah, dalam versi yang lebih tinggi spring-cloud, anotasi @EnableCircuitBreaker telah ditandakan sebagai usang Walau bagaimanapun, ini mungkin kerana kami adalah versi pertengahan, jadi terdapat situasi di mana ia tidak ditandakan sebagai usang tetapi sebenarnya tidak berguna
Dalam. pendek, fungsi pemutus litar feign hanya dikawal oleh feign.hystrix.enabled, selepas menambah anotasi @EnableCircuitBreaker Ia hanya akan mendayakan semua penunjuk lain dan fungsi lain Hystrix
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah gc penuh yang kerap disebabkan penggunaan memori Java yang tidak normal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!