OutOfMemoryError: Minecraft Sunucusunda Bellek Yetersizliği Çözümü
Minecraft sunucunuz aniden çöküyor ve log'da
java.lang.OutOfMemoryError: Java heap space görüyorsunuz. Bu hata, JVM'ye ayrılan belleğin tükendiğini ve yeni nesne oluşturulamadığını gösterir. Paniklemek yerine sistematik bir şekilde nedeni tespit edip çözebilirsiniz. Bu rehberde OutOfMemoryError'ın tüm boyutlarını anlatıyorum.Hatanın Tam Metni
java.lang.OutOfMemoryError: Java heap space
at net.minecraft.server...
at com.example.plugin...
veya bazen:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Bu ikinci form, GC'nin zamanının büyük çoğunluğunu bellek temizlemeye harcadığını ve yine de yeterli alan açamadığını gösterir.
Neden Oluşur?
- -Xmx değeri çok düşük: Sunucuya ayrılan maksimum heap, ihtiyaçtan az.
- Çok fazla oyuncu: Her oyuncu, chunk, yüklü varlık bellek tüketir.
- Bellek sızıntısı: Bir plugin nesneleri bellekte biriktiriyor, asla serbest bırakmıyor.
- Çok fazla plugin: Her plugin bellek tüketir; onlarca plugin birikimli olarak belleği doldurur.
- Aşırı chunk yükleme: view-distance çok yüksek; binlerce chunk bellekte tutulmaya çalışılıyor.
Anlık Çözüm: -Xmx Değerini Artırın
Eğer sunucunuzda yeterli fiziksel RAM varsa, JVM'ye daha fazla bellek verin:
# Öncesi:
java -Xms2G -Xmx2G -jar paper.jar nogui
# Sonrası (4 GB fiziksel RAM olan sunucu için):
java -Xms3G -Xmx3G -jar paper.jar nogui
Kural: -Xmx'i sisteminizin toplam RAM'inin %60-70'i kadar yapın; geri kalanı işletim sistemi için bırakın.
Gerçek Bellek Kullanımını Ölçme
Sunucu çalışırken Spark ile anlık heap durumunu görün:
/spark heap summary
Bu komut hangi nesne türünün ne kadar bellek tuttuğunu listeler. Beklenmedik derecede büyük bir nesne grubu bellek sızıntısına işaret eder.
Bellek Sızıntısı Tespiti
Sızıntı şüphesi varsa farklı zaman dilimlerinde heap snapshot alın:
# Sunucu başlangıcında:
/spark heap
# 2 saat sonra:
/spark heap
Sürekli artan belirli bir nesne tipi varsa, o nesneyi oluşturan plugin'i tespit edin ve güncelleyin veya kaldırın.
View Distance Düşürme
Her yüklü chunk bellek tüketir. View distance'ı düşürmek anlık bellek tasarrufu sağlar:
# server.properties
view-distance=8 # varsayılan 10'dan düşürün
simulation-distance=5
Pluginleri Gözden Geçirme
Kullanılmayan veya güncel olmayan pluginleri kaldırın. Her plugin kendi objelerini bellekte tutar; 50+ plugin olan sunucularda bu birikim anlamlıdır. Özellikle aktif olarak geliştirilmeyen eski pluginler bellek sızıntısı riski taşır.
GC Log Aktifleştirme
Uzun vadeli analiz için GC loglamasını açın:
java -Xms4G -Xmx4G \
-XX:+UseG1GC \
-Xlog:gc*:file=/opt/minecraft/logs/gc.log:time,uptime:filecount=5,filesize=10m \
-jar paper.jar nogui
GC loglarını GCViewer veya benzer araçlarla analiz ederek hangi GC döngülerinin uzun sürdüğünü görebilirsiniz.
Sonuç
OutOfMemoryError çoğunlukla yetersiz -Xmx değeri veya bellek sızıntısından kaynaklanır. İlk adım -Xmx'i artırmak; sorun devam ediyorsa Spark ile sızıntı analizi yapmaktır. Düzenli heap izleme, bu hatanın sürpriz yaratmasını önler.
💡 Etkileşim için giriş yap.