Latar Belakang:
Java menghadapi masa gangguan GC A kesesakan yang terlalu lama tidak dapat menggunakan terabait memori dengan berkesan. Memandangkan Go GC dioptimumkan, orang ramai pasti tertanya-tanya sama ada ia boleh mencapai masa gangguan GC yang cukup singkat dalam persekitaran memori peringkat terabait.
Soalan:
Jawapan:
Mata:
Butiran:
Timbunan Go mempunyai had 512 GB, dan saiz timbunan maksimum sebenar yang diuji ialah 240 GB.
Go 1.5 GC direka untuk mengurangkan masa gangguan GC, bukan mengurangkan kerja GC. Kod terganggu semasa GC mengimbas tindanan dan penunjuk dalam pembolehubah global.
Menurut carta daripada ceramah GopherCon 2015, 1.5 GC mempunyai masa gangguan yang lebih pendek dalam penanda aras GC dengan timbunan ~18GB, seperti yang ditunjukkan:
[Carta: masa gangguan GC Hubungan dengan timbunan saiz, menunjukkan peningkatan dalam versi 1.5]
Dalam aplikasi sebenar, beberapa masa gangguan GC asal adalah Laporan proses sebanyak 300ms menurun kepada 4ms dan 20ms, dan aplikasi lain melaporkan masa GC persentil ke-95 daripada 279ms kepada 10ms.
Go 1.6 dioptimumkan lagi dan meletakkan beberapa kerja di latar belakang. Hasilnya ialah walaupun saiz timbunan melebihi 200GB, masa gangguan maksimum dalam ujian masih 20ms, seperti yang ditunjukkan dalam rajah berikut:
[Carta: Masa 1.6 GC berubah dengan saiz timbunan, mencapai 20ms sekitar 180GB]
Dalam versi 1.6, saiz timbunan adalah kira-kira 8GB dan aplikasi memperuntukkan kira-kira 150M seminit Masa gangguan adalah dari 20ms dikurangkan kepada 3-4ms.
Twitch menggunakan Go untuk menjalankan perkhidmatan sembang mereka, dan mereka melaporkan bahawa dalam versi 1.7, masa jeda telah dikurangkan kepada 1ms sambil menjalankan sejumlah besar coroutine secara serentak.
1.8 Alihkan pengimbasan tindanan keluar daripada fasa berhenti-the-world, mengekalkan masa gangguan paling banyak di bawah 1ms, walaupun dengan timbunan yang besar. Keputusan ujian awal menunjukkan keadaan yang baik. Kadangkala masih terdapat corak kod dalam aplikasi yang menjadikan coroutine sukar untuk diganggu, dengan berkesan memanjangkan masa gangguan untuk semua urutan lain, tetapi secara keseluruhan kerja latar belakang GC biasanya lebih penting daripada masa gangguan GC.
Pemerhatian am:
Dalam erti kata lain, walaupun aplikasi akan mengakses banyak memori, jika bilangan penunjuk adalah kecil (mis., ia mengendalikan penimbal bait [] yang agak sedikit), dan kadar peruntukan adalah rendah (contohnya, kerana penyegerakan.Pool digunakan untuk menggunakan semula memori dalam senario limpahan memori yang paling terdedah), masalah GC mungkin tidak wujud.
Jadi, jika anda mempertimbangkan komputer besar dengan timbunan ratusan GB, dan ia sememangnya tidak sesuai untuk GC, saya cadangkan anda mempertimbangkan pilihan berikut:
Atas ialah kandungan terperinci Adakah Pengumpul Sampah Go 1.5 Sedia untuk Pengurusan Memori Skala Terabyte?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!