Minecraft sunucusunda optimizasyon, ayar dosyalarına rastgele değer yapıştırmak değil, önce ölçüp sonra tek tek müdahale etmektir: hedef 20.0 TPS ve tick başına 50 milisaniyenin altında bir MSPT değeridir — MSPT 50 ms'nin altında kaldığı sürece sunucunuz 20 TPS'te kalır. Lag yaşandığında RAM yükseltmek çoğu zaman hiçbir şey değiştirmez, çünkü sorun neredeyse her zaman dört yerden birindedir: varlık (entity) yükü, chunk üretimi, redstone ya da çöp toplama duraklamaları. Bu rehber, sorunu bulmayı ve doğru ayarı doğru yerde değiştirmeyi anlatıyor.
İki rakamı ayırt etmek, optimizasyonun tamamının temelidir.
Aradaki ilişki şudur: MSPT 50 ms'yi aşmadığı sürece TPS 20'de kalır. Bu yüzden asıl izlenmesi gereken rakam MSPT'dir — TPS düşmeye başladığında iş işten geçmiştir, ama MSPT 45 ms'ye tırmandığında hâlâ vaktiniz vardır.
Bir başka önemli ayrım: TPS düşük ama oyuncu ping'i normalse sorun sunucu işleme tarafındadır. Ping de yüksekse ağ ya da lokasyon tarafına bakmanız gerekir.
spark, Minecraft sunucuları için profilleme ve izleme aracıdır ve optimizasyona buradan başlanır. Temel komutları:
/spark tps — anlık TPS ve CPU kullanımı./spark health — TPS, CPU, bellek ve disk kullanımını içeren genel sağlık raporu./spark profiler — CPU ve bellek kullanımını örnekleyip ayrıntılı bir rapor üretir; sonuç çevrimiçi görüntüleyiciye yüklenir./spark tickmonitor — eşiği aşan tek tek tick'leri izler, ani sıçramaları yakalamak için idealdir.Doğru kullanım için iki kural var. Birincisi: profillemeyi sunucu boşken değil, lag yaşanırken yapın. Sessiz bir sunucuda alınan rapor size hiçbir şey söylemez.
İkincisi ve daha önemlisi: alev grafiğinde (flame graph) geniş bir dal, o kodun bozuk olduğunun kanıtı değildir — yalnızca örneklenen zamanın orada geçtiğini gösterir. Bir plugin geniş görünüyor olabilir çünkü asıl işi o yapıyordur. Grafiği her zaman o sıradaki oyuncu aktivitesiyle birlikte yorumlayın: kim neredeydi, hangi farm çalışıyordu, biri yeni bölgeye mi uçuyordu?
Profilleme raporunda ServerLevel#tickEntities CPU kullanımının %40'ını aşıyorsa suçlu mob, köylü ve item yığınlarıdır. En sık karşılaşılan iki kaynak: köylü yol bulma (pathfinding) hesaplamaları ve büyük hopper dizileri.
Bir oyuncu üretilmemiş araziye doğru uçtuğunda sunucu gerçek zamanlı olarak chunk üretmek ve diske yazmak zorunda kalır. MSPT bu anlarda belirgin biçimde sıçrar. Belirtisi nettir: lag, oyuncular keşfe çıktığında başlar, normal oyunda yoktur.
Vanilla redstone, zincirleme ışık ve blok güncellemeleri tetikler. Büyük redstone düzeneklerinin olduğu sunucularda tek başına ciddi yük üretir.
Belirtisi çok karakteristiktir: düzenli aralıklarla — örneğin her 30 saniyede bir — tekrarlayan TPS düşüşleri. Bu, Java'nın bellek temizliği için ana iş parçacığını dondurmasıdır. Sebebi genellikle yetersiz RAM değil, yanlış boyutlandırılmış yığın (heap) ve GC ayarlarıdır.
Optimizasyon rehberlerini uygularken en sık yapılan hata, ayarı yanlış dosyada aramaktır. Paper, eski tek dosyalı paper.yml yapısını bıraktı; güncel yapı şöyle:
server.properties — vanilla ayarları: view-distance, simulation-distance, max-players.bukkit.yml — mob doğma limitleri gibi temel Bukkit ayarları.spigot.yml — entity-activation-range, merge-radius gibi Spigot ayarları.config/paper-global.yml — sunucu genelinde geçerli Paper ayarları.config/paper-world-defaults.yml — tüm dünyalar için varsayılan değerler.world/dimensions/<namespace>/<key>/paper-world.yml — tek bir dünyaya özel istisnalar.Sistem kalıtımla çalışır: bir dünya için açıkça tanımlanmayan her ayar paper-world-defaults.yml'den devralınır. Yani tüm yapılandırmayı her dünyaya kopyalamanız gerekmez, yalnızca istisnaları yazarsınız.
Aşağıdakiler, çoğu sunucuda kazancın büyük bölümünü veren ayarlardır. Hepsini aynı anda uygulamayın — birer birer değiştirip gerçek yük altında test edin.
Tek başına en büyük etkiye sahip iki değer. view-distance istemciye gönderilen chunk sayısını, simulation-distance ise aktif olarak işlenen chunk sayısını belirler — CPU yükünün asıl kaynağı ikincisidir. Yoğun sunucularda 6–8 aralığı makul bir başlangıçtır. Simülasyon mesafesini görüş mesafesinin altında tutun: oyuncu uzağı görür ama uzaktaki chunk'lar işlenmez.
spigot.yml içindeki entity-activation-range, mobların hangi mesafeden itibaren işlenmeye başlayacağını belirler. Hayvan ve canavarlar için ölçülü biçimde düşürmek yük azaltır — ancak aşırıya kaçmak mobların oyuncunun burnunun dibinde donmasına yol açar ve oyun hissini bozar.
merge-radius değerini düşürülmüş item'lar için biraz artırmak, yerde biriken yığınları birleştirerek varlık sayısını düşürür.
Paper'ın max-entity-collisions değeri (varsayılan 8) çarpışma hesaplamalarını sınırlar. Ayrıca only-players-collide seçeneği çarpışma tespitini yalnızca oyuncuların dahil olduğu durumlara indirger — mob sıkıştırma farmlarının olduğu sunucularda belirgin fark yaratır.
Hopper'lar sessiz TPS katilidir. Paper'ın üç ayarı doğrudan işe yarar: cooldown-when-full dolu hopper'lara kısa gecikme uygular, ignore-occluding-blocks gereksiz konteyner taramasını atlar ve disable-move-event — resmî dokümantasyonun ifadesiyle hopper performansını çarpıcı biçimde iyileştirir. Son ayarı açmadan önce hopper olaylarına bağlı çalışan bir plugin'iniz olup olmadığını kontrol edin.
delay-chunk-unloads-by chunk'ların hemen boşaltılmasını geciktirir (10s, 25m gibi süre biçiminde) — oyuncuların ileri geri dolaştığı bölgelerde sürekli yükleme-boşaltma döngüsünü kırar. max-auto-save-chunks-per-tick (varsayılan 24) ise tick başına kaydedilecek chunk sayısını sınırlayarak otomatik kayıt sırasındaki sıçramaları yumuşatır.
Paper, redstone uygulamasını değiştirmenize izin verir: VANILLA, EIGENCRAFT veya ALTERNATE_CURRENT. Alternatif motorlar aynı sonucu daha verimli algoritmalarla üretir ve büyük redstone düzeneklerinin olduğu sunucularda gözle görülür fark yaratır. Davranış farkları olabileceği için önce test dünyasında deneyin.
optimize-explosions patlamalarda hesaplama yükünü azaltır. update-pathfinding-on-block-update ise mob yol bulmanın her blok güncellemesinde yeniden hesaplanmasını kontrol eder — köylü yoğun sunucularda bakılacak ayarlardandır.
Düzenli aralıklı TPS düşüşleri görüyorsanız sorun buradadır. Üç kural:
-Xms ve -Xmx eşit olsun. Bu, boşa ayrılan belleği ortadan kaldırır.-Xmx vermeyin. İşletim sistemine ayrı kapasite kalmalıdır.Minecraft sunucularında yaygın olan G1GC yapılandırmasında, 10 GB'a kadar olan sunucularda -XX:G1NewSizePercent=50, -XX:G1MaxNewSizePercent=80 ve -XX:InitiatingHeapOccupancyPercent=10 gibi değerler kullanılır; 10 GB üzerinde bunlar sırasıyla 35, 60 ve 15 olarak ayarlanır.
Ne kadar RAM gerektiğini ve paket seçimini Minecraft sunucu satın alma rehberimizde ayrıntılı ele aldık.
Plugin sayısı değil, ürettikleri yük önemlidir. Hafif 30 plugin, kötü yazılmış 5 plugin'den daha az sorun çıkarabilir. Denetim yöntemi:
Plugin kurulumu, güncelleme ve /reload tuzağı hakkında ayrıntı için Minecraft sunucusuna plugin nasıl eklenir yazımıza bakabilirsiniz. Kısaca: canlı sunucuda /reload kullanmayın; plugin'leri düzgün kapatmadığı için bellek sızıntısı ve zamanlanmış görev çakışması üretir ve belirtiler saatler sonra ortaya çıkar.
Bazı lag kaynakları ayar dosyasında değil, dünyanızın içindedir:
merge-radius bu sorunu büyük ölçüde çözer.Bu tür sorunlarda teknik çözümün yanında bir de kural koymak gerekir: farm boyutu sınırı, hopper yerine daha verimli alternatiflerin önerilmesi ve düzenli dünya denetimi. Yalnızca ayarla çözmeye çalışmak uzun vadede işe yaramaz.
Minecraft sunucusu işini büyük ölçüde tek bir iş parçacığında yapar. Bu yüzden TPS'i belirleyen şey çekirdek sayısı değil, işlemcinin frekansı ve neslidir. Yüksek frekanslı güncel nesil bir işlemcide çalışan 4 çekirdekli bir sunucu, eski nesil 8 çekirdekli bir sunucudan daha yüksek TPS verebilir.
Disk tarafı da göründüğünden önemlidir: chunk yükleme, otomatik kayıt ve dünya büyüdükçe artan disk I/O, NVMe M.2 SSD ile SATA arasında belirgin fark yaratır.
Bir de ölçülebilir bir tuzak var: sunucunuz paylaşımlı kaynakta çalışıyorsa TPS'iniz sizin kontrolünüzde değildir. Linux'ta top komutunu çalıştırıp CPU satırındaki %st (steal time) değerine bakın — yoğun saatlerde sürekli %10'un üzerindeyse fiziksel sunucu aşırı yüklüdür ve hiçbir ayar bunu düzeltmez. Konunun tamamını VDS ile VPS arasındaki fark yazımızda ele aldık.
Yukarıdaki ayarların hepsini doğru yapsanız bile TPS'in tavanını donanım belirler. Nubitro Minecraft sunucuları AMD Ryzen 9 9950X işlemciler üzerinde, Türkiye / İstanbul lokasyonunda, NVMe M.2 SSD disk ve 1 Gbps sınırsız trafik ile çalışır.
Kaynaklar fiziksel bölümlendirme ile tanımlandığı için komşu yoğunluğu tick sürenize yansımaz — yani ölçtüğünüz TPS gerçekten sizin sunucunuzun performansıdır. Paketler 2 çekirdek / 4 GB RAM seviyesinden 6 CPU / 32 GB RAM'e kadar ölçeklenir.
Paketleri Minecraft sunucu kiralama sayfamızdan inceleyebilir, kendi yapılandırmanızı kurmak isterseniz Ryzen VDS paketlerine bakabilirsiniz. Tüm hizmetler için nubitro.com ana sayfamızı ziyaret edebilirsiniz.
TPS sunucu tarafını ölçer, oyuncunun yaşadığı gecikmeyi değil. Sunucu 20 TPS'te çalışırken oyuncu lag hissediyorsa sorun ağdadır: ping, paket kaybı ya da lokasyon uzaklığı. Oyuncu kitleniz Türkiye'deyse yurt dışı lokasyon tek başına 40–60 ms ekler.
Evet, çok yaygın. RAM eklemek yalnızca gerçekten bellek darboğazındaysanız işe yarar. Düzenli aralıklı düşüşler görüyorsanız sorun GC ayarlarındadır; sürekli ve dalgasız düşüklük görüyorsanız tek çekirdek doygunluğudur. İkisi de RAM ile çözülmez.
Yoğun sunucularda 6–8 aralığı makul bir başlangıçtır ve simülasyon mesafesini bunun altında tutun. Ancak önce mevcut değerinizle bir ölçüm alın; bazı sunucularda darboğaz mesafede değil, entity yükünde olur ve mesafeyi düşürmek yalnızca oyun deneyimini kötüleştirir.
Hemen değil. Geniş bir dal, örneklenen zamanın orada geçtiğini gösterir — o kodun bozuk olduğunu değil. Plugin asıl işi yapıyor da olabilir. Raporu o sıradaki oyuncu aktivitesiyle birlikte değerlendirin ve mümkünse test ortamında plugin'i devre dışı bırakıp ölçümü tekrarlayın.
Başlangıç noktası olarak bakabilirsiniz ama olduğu gibi yapıştırmayın. Bu paketler genellikle belirli bir sunucu tipi için hazırlanır ve aşırı agresif değerler içerebilir; sonuç, TPS kazanırken oyun hissini bozmak olur. Her ayarı ne yaptığını bilerek ve tek tek uygulayın.
Doğrudan dosya boyutu değil, üretilmemiş alana yapılan keşif etkiler. Oyuncular sürekli yeni bölgelere açılıyorsa chunk üretimi MSPT'yi sıçratır. Dünya sınırı (world border) tanımlamak bu yükü öngörülebilir hale getirir.
ServerLevel#tickEntities %40 üzerindeyse sorun mob, köylü ve hopper yükündedir.paper-global.yml, paper-world-defaults.yml ve dünya bazlı paper-world.yml kullanır.-Xms ile -Xmx eşit olmalı; aşırı heap GC donmalarını artırır./reload kullanmayın.%st sürekli %10 üstündeyse TPS sizin kontrolünüzde değildir.