Go 1.3 garbage collector tidak melepaskan memori pelayan kembali ke sistem
Pelayan yang dibangunkan untuk memeriksa jejak memori menunjukkan turun naik memori RES walaupun dijangka keluaran memori selepas peningkatan dalam sambungan. Isu ini timbul disebabkan oleh pengehadan pengumpul sampah Go dalam melepaskan memori timbunan serta-merta dan ketidakbolehaksesan memori tindanan goroutine ke OS. Panggilan sistem yang tersedia dalam sistem seperti Unix untuk melepaskan bahagian timbunan yang tidak digunakan tidak tersedia pada Windows, menyebabkan penggunaan memori maya yang berpotensi lebih besar.
Pada mulanya, pelayan bermula dengan jejak memori kecil. Semasa nadi awal 10,000 sambungan, penggunaan memori meningkat kepada kira-kira 60MB (seperti yang ditunjukkan oleh saiz RES dalam "atas"). Apabila nadi berakhir, penggunaan ingatan berkurangan. Walau bagaimanapun, saiz RES kekal dinaikkan pada 56MB, manakala memori dalam penggunaan tidak pernah jatuh di bawah 60MB.
Semasa pemungut sampah Go mengeluarkan memori timbunan, ia tidak segera mengembalikannya ke sistem. Proses ini mungkin mengambil masa sehingga tujuh minit selepas sapuan GC. Selain itu, memori yang diperuntukkan kepada susunan goroutine tidak pernah dikeluarkan kepada OS. Ini menyumbang kepada penggunaan memori tinggi yang berterusan yang diperhatikan dalam pelayan.
Malangnya, tiada penyelesaian yang jelas untuk isu ini dalam Go versi 1.3. Walau bagaimanapun, keadaan dijangka bertambah baik dalam keluaran berikutnya. Untuk mengurangkan kesan, pertimbangkan langkah berikut:
Atas ialah kandungan terperinci Mengapa 1.3 Tidak Keluarkan Memori Pelayan Kembali ke Sistem Selepas Pancang Sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!