Spark ile Minecraft performans analizi, sunucunun her tick’te hangi işe kaç milisaniye harcadığını ölçüp raporlayan örnekleme tabanlı bir profiler ile yapılır. Tahmine dayalı config değişikliği yerine gerçek darboğazı gösterdiği için, optimizasyon sürecinin ilk adımı daima bir spark raporudur.
Bu sayfada spark’ı kurmayı, doğru komutlarla profil almayı ve en önemlisi çıkan raporu yorumlamayı anlatıyoruz. Sonunda hangi eklentinin, hangi entity’nin veya hangi dünya işleminin sunucunuzu yavaşlattığını kendiniz tespit edebileceksiniz.
/timings komutu yoktur; analiz aracı spark’tır. Eski rehberlerde geçen timings raporu yorumları bu sürümlerde uygulanamaz.Spark Kurulumu#
spark tek bir jar dosyasıdır ve platforma göre ayrı yapılar sunar. Sunucu türünüze uygun olanı indirin.
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin.
-
Jar dosyasını doğru klasöre koyun#
Paper, Purpur ve Spigot için
plugins, Fabric ve NeoForge içinmodsklasörü. Velocity kullanıyorsanız proxy’ninpluginsklasörüne ayrıca kurabilirsiniz. -
Sunucuyu yeniden başlatın#
Konsolda spark’ın yüklendiğini doğrulayın. Yükleme sonrası ilk kontrol komutu:
spark health -
Yetkileri verin#
Oyun içinden kullanacaksanız
sparkiznini yönetici grubuna tanımlayın. LuckPerms ile:lp group admin permission set spark trueYetki sistemi kurulumu için LuckPerms rehberine bakabilirsiniz.
Temel Komutlar ve Ne Zaman Kullanılır#
| Komut | Ne yapar | Ne zaman kullanılır |
|---|---|---|
/spark health | TPS, MSPT, CPU, bellek, disk özeti | İlk teşhis |
/spark tps | TPS ve MSPT yüzdelik dağılımı | Dalgalanma kontrolü |
/spark profiler | CPU örnekleme profili başlatır | Darboğaz arama |
/spark tickmonitor | Eşiği aşan tick’leri raporlar | Ani donmalar |
/spark heapsummary | Heap içindeki nesne dağılımı | Bellek şişmesi |
/spark gc | Çöp toplayıcı istatistikleri | Düzenli TPS düşüşleri |
/spark activity | Son etkinlik günlüğü | Geçmişe bakma |
Doğru profil nasıl alınır#
Profilin işe yaraması için üç şart vardır: sunucu yükte olmalı, süre yeterli olmalı ve doğru iş parçacığı hedeflenmelidir.
spark profiler --timeout 300 --thread server
spark profiler --timeout 300 --thread * --only-ticks-over 50
spark profiler --info
spark profiler --stop
--thread server yalnızca ana tick iş parçacığını profiller; TPS sorunlarında istediğiniz budur. --thread * tüm iş parçacıklarını kapsar ve chunk üretimi, ağ, disk I/O gibi yan iş parçacıklarını da gösterir. --only-ticks-over 50 ise yalnızca 50 ms’i aşan tick’lerde örnek toplar; ortalamada kaybolan tepe yükleri bulmak için çok işe yarar.
Raporu Okumak: Çağrı Ağacı Mantığı#
Profil bittiğinde konsola bir bağlantı düşer. Bu bağlantıyı açtığınızda karşınıza ağaç yapısında bir çağrı listesi çıkar. Her satırda bir metod adı, o metodun toplam sürenin yüzde kaçını aldığı ve altındaki alt çağrılar bulunur.
Okuma yöntemi basittir: en yüksek yüzdeli daldan başlayıp aşağı inersiniz. Yüzde bir alt dala tamamen aktarılıyorsa devam edersiniz; birden fazla dala bölünüyorsa dallanmanın olduğu yer önemlidir.
Karşılaşacağınız tipik dallar#
- ServerLevel.tick
- Dünyanın ana tick’i. Altında entity, blok ve chunk işleri toplanır.
- tickNonPassenger / entity tick
- Entity yapay zekâsı. Yüksekse mob ve item yığılması vardır.
- tickBlockEntities
- Hopper, sandık, fırın gibi blok entity’leri. Yüksekse hopper zinciri arayın.
- chunk generate / ChunkStatus
- Yeni chunk üretimi. Yüksekse dünya ön üretimi yapılmamış demektir.
- Plugin paket adları
- Örneğin
com.example.pluginile başlayan zincirler. Doğrudan eklenti maliyetidir. - redstone / signal
- Redstone hesaplaması. Alternatif redstone motoru kazanç sağlar.
- SqlConnection / JDBC
- Ana iş parçacığında veritabanı sorgusu. Kritik bir hatadır, düzeltilmeli.
Yorumlama örnekleri#
| Raporda gördüğünüz | Anlamı | Yapılacak |
|---|---|---|
| Entity tick %40 | Mob ve item yığılması | activation range ve merge radius ayarı |
| tickBlockEntities %25 | Hopper zinciri | hopper-transfer ve hopper-check değerini artırın |
| Chunk generate %30 | Canlı chunk üretimi | Chunky ile ön üretim, world border |
| Tek eklenti %20 | Pahalı eklenti | Ayar hafifletme veya alternatif |
| GC dalları yüksek | Bellek baskısı | Heap ve GC bayraklarını gözden geçirin |
| Yük vanilla mantıkta dağınık | Donanım sınırı | Daha yüksek saat hızlı işlemci |
Tespit ettiğiniz sorunun çözümü için ilgili sayfalara geçin: entity ve hopper yükü paper.yml ve spigot.yml rehberinde, chunk üretimi view distance sayfasında, genel yaklaşım optimizasyon ana rehberinde anlatılıyor.
Tick Monitor: Ani Donmaları Yakalamak#
Bazı sunucularda ortalama MSPT gayet iyidir ama dakikada bir kez 400 ms süren bir tick oluşur ve oyuncular bunu belirgin donma olarak hisseder. Ortalamalara bakan bir profil bu tepeyi kaçırabilir.
spark tickmonitor --threshold 100
spark tickmonitor --threshold-tick 150
spark tickmonitor --without-gc
Eşiği aşan her tick için konsola bir özet basılır. Bu özette tick’in ne kadar sürdüğü ve GC kaynaklı olup olmadığı görünür. GC kaynaklıysa bellek tarafına, değilse oyun mantığına yönelirsiniz.
Bellek Analizi: heapsummary ve GC#
Sunucunuz zamanla yavaşlıyor ve yeniden başlatınca düzeliyorsa bellek tarafına bakmalısınız. İki komut yeterli bilgi verir.
spark gc
spark heapsummary
spark gc, hangi çöp toplayıcının çalıştığını, toplama sıklığını ve ortalama duraklama süresini gösterir. Duraklama süreleri 200 ms’i aşıyorsa TPS grafiklerindeki düzenli düşüşlerin sebebi budur.
spark heapsummary, heap içinde hangi sınıftan kaç örnek olduğunu listeler. Beklenmedik şekilde şişmiş bir sınıf görürseniz (örneğin milyonlarca item entity’si veya bir eklentinin önbellek nesnesi) kaynağı yakalamışsınız demektir.
Bellek sonuçlarını nasıl yorumlarsınız#
| Gözlem | Muhtemel sebep | Çözüm |
|---|---|---|
| GC sıklığı yüksek, duraklama kısa | Heap küçük ama yetiyor | Heap’i bir kademe artırın |
| Duraklamalar 300 ms üzeri | Heap büyük, GC seçimi yanlış | 16 GB+ heapte ZGC değerlendirin |
| Heap sürekli doluyor | Bellek sızıntısı olabilir | heapsummary ile şişen sınıfı bulun |
| Xms ile Xmx farklı | JVM heap boyutunu sürekli değiştiriyor | İkisini eşitleyin |
-XX:+ZGenerational bayrağı ise Java 25’te obsolete’tir ve konsola uyarı basar; kullanmayın. Ayrıntı için RAM ve JVM flag rehberine bakın.Ölç, Değiştir, Yeniden Ölç#
Profiler’ın en büyük değeri, yaptığınız değişikliğin işe yarayıp yaramadığını kanıtlamasıdır. Disiplinli bir döngü kurun.
-
Referans profili alın#
Yoğun saatte beş dakikalık profil alın ve bağlantıyı bir yere kaydedin. Bu sizin başlangıç noktanız.
-
Tek bir değişiklik yapın#
Aynı anda beş ayar değiştirirseniz hangisinin işe yaradığını asla bilemezsiniz. Değişikliği tek tek uygulayın.
-
Benzer yükte tekrar ölçün#
Oyuncu sayısı ve saat mümkün olduğunca benzer olmalı. 10 oyunculu profille 40 oyunculu profili karşılaştırmayın.
-
Kazanç yoksa geri alın#
İşe yaramayan ayarı config’de bırakmayın. Anlamsız ayar birikintisi ileride teşhisi zorlaştırır.
-
Sonucu not edin#
Hangi ayarın kaç milisaniye kazandırdığını kaydedin. Sunucu büyüdükçe bu notlar çok değerli hâle gelir.
Raporu Paylaşırken Dikkat Edilecekler#
spark raporları spark.lucko.me üzerinde barındırılır ve bağlantıya sahip herkes görüntüleyebilir. Rapor içinde sunucu sürümü, eklenti listesi, mod listesi ve bazı dosya yolları görünür.
- Bağlantıyı herkese açık forumlarda paylaşmadan önce içeriğini kontrol edin.
- Rapor, oyuncu şifresi veya veritabanı bilgisi içermez ama eklenti envanterinizi açığa çıkarır. Bu bilgi, saldırgan için hedef seçmeyi kolaylaştırabilir; güvenlik rehberimizde bu konuya değiniyoruz.
- Destek ekibimizden yardım alacaksanız rapor bağlantısını destek talebi üzerinden iletmeniz en pratik yoldur.
Sunucu Çöküyorsa: Profil Değil Crash Report#
spark performans sorunları içindir. Sunucu tamamen kapanıyorsa okumanız gereken dosya profil raporu değil, crash-reports klasöründeki dosya ve logs/latest.log içeriğidir.
crash-reports/crash-2026-08-11_03.41.22-server.txt
logs/latest.log
Bu dosyaları okumayı ve stack trace’ten sorumlu eklentiyi bulmayı crash report okuma rehberinde anlatıyoruz. Bellek yetersizliğinden kaynaklanan çökmeler için OutOfMemoryError sayfası daha uygundur.
Özetle#
spark, Minecraft sunucu yönetiminde tahmini ölçümle değiştiren araçtır. Kurulumu tek jar, kullanımı üç komut, faydası ise saatlerce süren deneme yanılmadan kurtulmaktır.
Pratik rutin şudur: sorunu duyduğunuzda /spark health ile genel duruma bakın, yükteyken /spark profiler --timeout 300 ile beş dakikalık profil alın, çağrı ağacında yüzdesi en yüksek dalı kaynağına kadar takip edin, tek bir değişiklik yapıp aynı koşullarda yeniden ölçün. Ani donmalar için tick monitörünü, zamanla yavaşlama için heapsummary ve gc komutlarını kullanın. Ölçmediğiniz hiçbir ayarı değiştirmeyin.