Saya memiliki kotak linux RAM 8GB di mana 4 server kucing jantan sedang berjalan. Salah satunya diatur ke memori 3000MB (pengaturan jvm -Xms dan -Xmx) dan lainnya diatur ke 1500MB. Partisi swap juga diatur ke 8Gigs. Ketika saya memulai server ini, penggunaan file swap rendah. Tetapi selama beberapa hari dan selama waktu-waktu tertentu ketika satu / semua server berada dalam aktivitas puncak, penggunaan swap mulai meningkat. Berikut ini adalah keluaran sar -r yang khas.
kbmemfree kbmemused% memused kbbuffers kbcached kbswpfree kbswpused % swpused kbswpcad
48260 8125832 99.41 196440 2761852 7197688 1190912 14.20 316044
75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032
Ini menunjukkan 14,2% swap yang digunakan saat ini. Yang lucu adalah% ini TIDAK PERNAH berkurang . Itu terus meningkat dan mencapai hingga 30-40% . Kami me-restart server kami setiap minggu.
Saya akan mengasumsikan % swpused meningkat selama periode aktivitas puncak dan menurun selama periode aktivitas rendah .. Atau setidaknya tetap konstan. Ini sepertinya ruang swap tidak pernah direklamasi oleh OS ..
Output gratis: gratis -m total yang digunakan buffer bersama yang disimpan dalam cache Mem: 7982 7937 45 0 32 2088 - / + buffer / cache: 5816 2166 Swap: 8191 1163 7028
Jadi setidaknya ada 2g Ram gratis. Jadi pertanyaannya adalah mengapa ruang swap terus meningkat dan tidak direklamasi oleh OS? Atau cara debug ini untuk mencari tahu apa yang terjadi ..
sumber
Pada dasarnya, Anda tidak perlu peduli tentang ini. Yang penting untuk diketahui adalah berapa banyak IO masuk ke swap (lihat perintah 'vmstat'). Memiliki lebih banyak barang di swap tidak memerlukan biaya apa pun. Satu-satunya biaya adalah menempatkan barang di swap (halaman masuk) atau mengeluarkannya (halaman keluar). Jadi sangat masuk akal bagi OS untuk membiarkan swap tumbuh.
sumber
selama Anda memiliki ruang swap yang tersedia, tidak perlu os untuk membebaskan ruang swap. Ini akan dibebaskan ketika tidak ada ruang tersisa. Namun ketika Anda berada dalam situasi ini Anda pasti memiliki masalah.
sumber
Tidak ada cara untuk mengetahui apakah ini pada akhirnya akan menjadi masalah kecuali Anda menjalankan server cukup lama untuk melihat apakah itu menjadi masalah.
Pada dasarnya OS akan menukar hal-hal yang tidak digunakan untuk menjaga memori bebas setiap saat, jika program baru dimulai. Swap space tidak akan dibebaskan sebelum dibutuhkan, artinya Anda dapat menggunakan 100% ruang swap dan tidak memiliki masalah kinerja. Yang perlu dikhawatirkan adalah jika ini disebabkan oleh kebocoran memori. Ini belum tentu kebocoran memori tetapi bisa jadi.
Java tidak rentan terhadap kebocoran memori, tetapi itu bisa terjadi dengan aplikasi yang rumit terutama.
sumber