Belirtiler: Sunucu normalde akıcı çalışıyor ama arada 2-5 saniyelik donmalar yaşanıyor, sonra devam ediyor. Oyuncular anlık "teleport" yaşıyor, mobiler sıçrıyor. Bu ani donmalar (lag spike) genellikle GC pause, chunk save veya backup kaynaklıdır.
Olası Nedenler
- Stop-the-world GC pause - heap boyutu uygunsuz ya da GC flag'leri eksik
- Chunk save spike - otomatik save sırasında tüm modifiye chunk'lar aynı anda diske yazılıyor
- Backup aktif - tar/zip çalışırken disk IO doluyor, main thread yazmaya bekliyor
- RAM swap - fiziksel RAM yetmediği için kernel disk'e swap yapıyor
- Async olmayan plugin işlemi - main thread'de DB sorgusu veya HTTP isteği bloklama yapıyor
- Entity / tile entity tick spike - çok fazla hopper veya beacon aynı tick'te işleniyor
Adım Adım Çözüm
1. Adım
Spark profiler ile spike anını yakalayın - sadece ağır tick'leri filtreleyin
/spark profiler --only-ticks-over 50 --timeout 1802. Adım
GC loglarını açın - pause sürelerini net görün
# start script'e ekleyin:
-Xlog:gc*:file=logs/gc.log:time,uptime:filecount=5,filesize=10M3. Adım
Heap'i Xms = Xmx olacak şekilde sabit tutun. Ayrıca MaxGCPauseMillis=200 hedef verin
-Xms8G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=2004. Adım
Aikar's Flags'i tam uygulayın. Yarım uygulama spike'ları bitirmez. Tüm setini kullanın
# Aikar flags için referans:
# https://docs.papermc.io/paper/aikars-flags5. Adım
Chunk save'i aralıklı hale getirin - tüm dünyayı aynı anda kaydetmeyin
# config/paper-global.yml
chunk-saving:
max-chunks-to-save-per-tick: 46. Adım
Backup scriptinizi düşük trafik saatine (03:00 gibi) alın. Canlı oyuncu varken tar çalıştırmak büyük spike yapar
crontab -l | grep backup
# yeni saat örneği:
# 0 3 * * * /opt/scripts/mc-backup.sh7. Adım
RAM swap kullanımını kontrol edin - swap > 0 ise sorun
free -m
vmstat 1 5 # si/so kolonları 0 olmalı8. Adım
Hopper zincirleri ve beacon gruplarını azaltın. Gerekirse LagAssist / FarmLimiter kurun
# Spark profiler rapor > Entity tick bölümünde sorunlu chunk'ları bulun9. Adım
Async olmayan plugin işlemlerini izleyin - Spark timings raporunda görünür. Plugini güncelleyin ya ConnectionPool eklenmesini talep edin
10. Adım
Sorun sürerse KEYDAL Spark Analyzer aracına profile raporunu yükleyin; ücretsiz otomatik analiz alırsınız: /oyun/araclar/spark