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