Spark ve Timings ile Minecraft Sunucu Performans Analizi
Sunucunuz yavaşlıyor, TPS düşüyor ama neden olduğunu bilmiyorsunuz. Performans sorunlarını kör kör çözmek hem zaman hem kaynak israfıdır. Doğru araçlarla neyin ne kadar CPU tükettiğini, hangi pluginin lag'a neden olduğunu ve hangi varlıkların sunucuyu yorduğunu dakikalar içinde tespit edebilirsiniz. Bu rehberde Spark profiler ve Timings araçlarını anlatıyorum.
TPS Nedir ve Neden Önemli?
TPS (Ticks Per Second), Minecraft'ın saniyede kaç oyun döngüsü işlediğini belirtir. İdeal değer 20'dir; altına düştükçe oyun yavaşlar:
- 20 TPS → Mükemmel, sorunsuz oynanış
- 18-19 TPS → Hafif düşüş, genellikle fark edilmez
- 15-17 TPS → Belirgin yavaşlama, bazı gecikmeler
- 10-14 TPS → Ciddi lag, oyuncular şikayet eder
- 10 TPS altı → Oynanamaz düzeyde yavaşlama
Mevcut TPS'yi görüntülemek için:
/tps
Paper ve Spigot'ta bu komut dahili olarak mevcuttur; ayrı plugin gerekmez.
Timings: Dahili Paper Profiler
Timings, Paper'a dahili gelmiş basit bir profiler'dır. Kullanımı:
/timings reset
/timings report
reset komutu ölçüm sayaçlarını sıfırlar. Birkaç dakika bekleyin (lag varsa tam o anda), ardından report girin. Konsola bir URL verir; bu URL'yi tarayıcıda açtığınızda hangi plugin, hangi event kaç ms harcadığını görebilirsiniz.Timings sayfasında dikkat edilecek metrikler:
- Full Server Tick: Toplam tick süresi. 50ms'nin (yani 20 TPS sınırı) üzerindeyse lag var.
- Plugin breakdown: Hangi plugin en fazla zamanı alıyor?
- Entity tick: Mob ve varlık işleme süresi. Yüksekse çok fazla entity var.
Spark: Profesyonel Profiler
Spark, Timings'den çok daha ayrıntılı CPU ve bellek analizi yapar. Modern sunucu yöneticilerinin tercihi haline gelmiştir. SpigotMC veya Modrinth'ten jar'ı indirip plugins klasörüne kopyalayın.
Temel kullanım:
/spark profiler start
# 1-3 dakika bekleyin (lag'ın yaşandığı dönemi kapsayın)
/spark profiler stop
Konsola bir link verir; bu linkte flame graph formatında profil görüntüleyebilirsiniz.
Spark Flame Graph'i Okumak
Flame graph'te her blok bir metod çağrısıdır; genişliği CPU süresiyle orantılıdır. En geniş bloklar en çok CPU tüketen işlemlerdir.
- Üst katmanlar: Ana sunucu döngüleri (MinecraftServer.tick vb.)
- Alt katmanlar: Pluginlerin spesifik metodları
- Geniş renkli blok görüyorsanız: O plugin veya işlem lag'a neden oluyor demektir
Genellikle flame graph'in en geniş birkaç bloğunu takip etmek kaynağı bulmak için yeterlidir.
Spark ile Bellek Analizi
/spark heap
Bu komut anlık heap dump'ının URL'sini verir. Bellek sızıntısı şüphesi varsa saatler aralıklı iki ölçüm alın ve karşılaştırın. Heap büyüyüp küçülmüyorsa sızıntı var demektir.
Yaygın Performans Sorunları ve Tespiti
- Entity flood: Timings'te "EntityTick" çok yüksek. Çözüm: Paper entity limitleri veya ClearLagg.
- Kötü yazılmış plugin: Spark flame graph'te bir plugin metodu aşırı geniş. Çözüm: plugini güncelleyin veya kaldırın.
- Chunk yükleme lag'ı: Timings'te "ChunkGeneration" yüksek. Çözüm: view-distance düşürün.
- Aşırı redstone: Büyük redstone devreleri her tick çalışır. Çözüm: WorldGuard ile bölgesel kısıtlama veya redstone limiti plugini.
- Veritabanı sorguları: Bazı pluginler her tick'te DB sorgusu yapar. Çözüm: plugin yapılandırmasını optimize edin.
Sürekli İzleme
Spark, sürekli çalışan bir izleme moduna da sahiptir:
/spark health
Bu komut anlık TPS, tick ortalama süresi, bellek kullanımı ve CPU yükü gibi özet bilgileri verir. Günlük kontrol için idealdir.
Sonuç
Performans sorunlarını çözmek için önce doğru araçla tanı koyun. Spark ve Timings, hangi plugin, entity veya işlemin lag'a neden olduğunu somut verilerle gösterir. Bu verilere dayanarak aldığınız optimizasyon kararları, kör deneme-yanılmadan çok daha etkilidir. Sorun tespit edilince çözüm genellikle basittir.
💡 Etkileşim için giriş yap.