
Wispdock kontrol paneli henüz hazır değil. Bir adımda “kontrol panelinde” yazıyorsa, sağlayıcının dosyalar, konsol ve başlat/durdur için sunduğu araçları kullan. Minecraft tarafı her yerde aynı çalışır.
Java sunucusunun paketini değiştirmeden önce profil al; mod paketi sunucularında otomasyon ve yüklü chunk sayısı da yükü belirler.
Hangi tür lag
- Sunucu lagı: herkes aynı anda yaşar. Yaratıklar donar, kırılan bloklar geri gelir, gün saati atlar. Sunucu saniyede 20 tick’in altında çalışıyordur.
- İstemci lagı: yalnızca sen yaşarsın, düşük FPS olarak. Çözüm senin bilgisayarında: görüş mesafesi, shader’lar, Sodium gibi bir performans modu.
- Ağ lagı: diğer herkes iyiyken tek bir oyuncunun pingi yüksektir. Genelde sebep onun bağlantısı ya da sunucuya olan uzaklığıdır.
Hızlı bir test: F3 ekranını aç. Takılma anında FPS’in düşüyorsa sorun senin oyununda. Birkaç oyuncu aynı anda şikâyet ediyorsa ve /tps 20’nin altındaysa sorun sunucuda, rehberin geri kalanı da tam bunun için.
Tick hızını kontrol et
Sunucu oyunu tick’ler halinde işler; yetişebildiğinde saniyede 20 tick. Her tick’e 50 ms düşer. Bir tick daha uzun sürerse sonraki geç başlar ve bütün dünya yavaşlar.
Paper’da /tps son 1, 5 ve 15 dakikadaki saniye başına tick sayısını gösterir. /mspt ise tick’lerin ne kadar sürdüğünü (tick başına milisaniye) son birkaç saniye ve son bir dakika için ortalama ve tepe değerleriyle verir. Vanilla 1.20.3 ve sonrasında /tick query hedef hızı ve ortalama tick süresini gösterir. spark kuruluysa /spark tps her platformda çalışır.
MSPT, TPS’ten daha çok şey söyler. TPS 20’de durur; 20 TPS gösteren bir sunucu tick başına 12 ms de harcıyor olabilir, 48 ms de. Bizim kabaca kullandığımız ölçü:
| MSPT | Anlamı |
|---|---|
| 30 ms altı | Tam hız, üstüne pay da var. Yoğun anlarda tick kaçmaz. |
| 30 ile 50 ms arası | Hâlâ 20 TPS ama sınıra yakın. Yeni araziye uçan biri ya da yüklenen büyük bir çiftlik onu sınırın üstüne itebilir. |
| 50 ms üstü | 20 TPS’in altı. Herkes hisseder. |
Log da bunu söyler. Can't keep up! Is the server overloaded? Running 5032ms or 100 ticks behind satırı, sunucunun o kadar geride kaldığını gösterir. Açılış sırasında bir tane görmek normaldir. Arka arkaya geliyorsa, aradığın sorun budur.
Nedeni spark ile bul
spark bir profil aracıdır: sunucunun ana iş parçacığının ne yaptığını saniyede defalarca örnekler ve toplar. Güncel Paper sürümlerinde hazır gelir. Fabric, Forge ve NeoForge’da Modrinth ya da CurseForge’dan mod olarak kurulur. Oyuncuların tarafında hiçbir şey gerektirmez.
/spark profiler start
/spark profiler stop
Başlat, lag yaşanırken birkaç dakika çalışsın, sonra durdur. spark sana web görüntüleyicisinde açılan bir rapor bağlantısı verir. Başında beklemek istemiyorsan /spark profiler start --timeout 300 beş dakika sonra kendiliğinden durur.
Bazı laglar sürekli değildir. Sunucu çoğu zaman iyiyse ve arada bir saniyeliğine donuyorsa, yalnızca yavaş tick’leri kaydet:
/spark profiler start --only-ticks-over 100
Bu, 100 ms’den hızlı her tick’i yok sayar; böylece rapor, takılmaların ortak noktasını gösterir. Bilmeye değer iki komut daha var: /spark health TPS, MSPT, işlemci, bellek ve disk kullanımını tek seferde yazar, /spark tickmonitor ise bir tick uzun sürdüğünde sohbete bir satır düşer.
spark raporunu okumak
Rapor, her birinin harcadığı zaman payıyla birlikte bir metot çağrıları ağacıdır. Kalabalık görünür ama sana yalnızca bir dalı lazım.
Başlığa bak: platform, Minecraft sürümü ve örneklemenin ne kadar sürdüğü. Sakin bir sunucudan alınmış otuz saniyelik örnek pek bir şey göstermez.
Server threadsatırını aç. Bu, oyunun ana döngüsüdür; tick’leri yavaşlatan her şey bunun altındadır. Diğer iş parçacıkları (chunk işçileri, ağ) düşük TPS’i nadiren açıklar.En büyük yüzdeyi izleyerek aşağı doğru, her seferinde bir seviye in. Bir kalemin üstündekinin zamanının çoğunu almayı bırakıp birçok küçük kaleme bölündüğü yerde dur. Cevap genelde o bölünme noktasıdır.
Zamanın büyük kısmı bekleme ya da uyuma kaleminde duruyorsa, sunucunun o sırada boş vakti vardı. Lag gerçekten yaşanırken yeniden ölç.
Dalın bittiği yer neyi düzelteceğini söyler:
- Varlık işleme (entity ticking): fazla yaratık, köylü ya da eşya. Varlık sayısı bölümüne bak.
- Blok varlığı işleme: huniler, fırınlar, modlu makineler. Kızıltaş ve huniler bölümüne bak.
- Chunk üretimi ya da yükleme: keşfe çıkan oyuncular. Chunky bölümüne bak.
com.example.someplugingibi bir paket adı: yükü o eklenti ya da mod getiriyor. Ayarlarına bak, güncelle ya da sunucuyu onsuz dene.
Eklentili ve modlu sunucularda spark’ın Sources görünümü zamanı eklentiye ya da moda göre gruplar; suçlu biri var mı görmenin en hızlı yolu budur. İkinci bir göz istersen rapor bağlantısını bize gönder.
Görüş ve simülasyon mesafesi
İkisi de server.properties içindedir ve ikisinin de varsayılanı 10’dur. Farklı maliyetleri kontrol ederler.
| Ayar | Neyi kontrol eder | Neye mal olur | Oyuncular neyi fark eder |
|---|---|---|---|
simulation-distance | Her oyuncunun çevresinde işlenen chunk’lar: yaratıklar hareket eder, ekinler büyür, kızıltaş çalışır, yaratıklar doğar | Her tick işlemci | Daha uzaktaki çiftlikler ve ekinler durur |
view-distance | Her oyuncuya görmesi için gönderilen chunk’lar | Bellek, bant genişliği, oyuncu hareket ettikçe chunk yükleme | Ne kadar uzağı görebildikleri |
simulation-distance değerini 6 ya da 8’e düşürmek en çok işlemci tasarrufunu sağlar ve oyuncuların çoğu fark etmez. Chunk göndermek onları işlemekten daha ucuz olduğu için view-distance biraz daha yüksek kalabilir. Küçük bir survival grubu için simülasyon 6 ile 8, görüş 8 ile 10 arası mantıklı bir başlangıçtır. İkisinden birini değiştirdikten sonra yeniden başlat.
Beklemen gereken iki yan etki var. AFK çiftliği yalnızca bir oyuncu simülasyon mesafesi içindeyken çalışır; değişiklikten sonra birinin çiftliği durabilir. Ayrıca oyuncular, kendi görüş mesafeleri ne derse desin, sunucunun view-distance değerinden uzağı göremez; daha önce gördüğü chunk’ları saklayan bir istemci modu kullanıyorlarsa başka. Bu dosyadaki diğer ayarlar server.properties rehberinde.
Dünyayı Chunky ile önceden oluştur
Yeni chunk oluşturmak sunucunun yaptığı en ağır işlerden biridir ve farklı yönlere keşfe çıkan oyuncular bunu daha da ağırlaştırır. Chunky (Paper için eklenti; Fabric, Forge ve NeoForge için mod) bu chunk’ları önceden oluşturur. Kimse oynamıyorken şunları çalıştır:
/chunky center 0 0
/chunky radius 5000
/chunky start
Bu, merkezin çevresinde 10.000’e 10.000 bloklık bir kare oluşturur. Saatler ve birkaç gigabaytlık disk alanı alabilir. /chunky pause ve /chunky continue ile durdurup devam ettirebilirsin; yeniden başlatmadan sonra da kaldığı yerden sürer. Ardından, kimse oluşturulan alanın dışına çıkmasın diye aynı boyutta bir dünya sınırı koy:
/worldborder center 0 0
/worldborder set 10000
/worldborder set yarıçapı değil tam genişliği alır, burada 10000 olmasının nedeni bu. Oyuncular Nether’da da vakit geçiriyorsa onu /chunky world world_nether ile seç (Paper’da) ve orada da daha küçük bir yarıçapla çalıştır.
Varlık sayısını düşük tut
Survival sunucularında lagın olağan nedeni fazla varlıktır: büyük yaratık çiftlikleri, yüzlerce köylü, kendi haline bırakılmış üreyen tavuklar, birikmiş yerdeki eşyalar. Hangi türlerin nerede olduğunu spark gösterir.
Paper’da /paper entity list varlıkları türe göre sayar. Sonuna bir tür eklersen, örneğin /paper entity list minecraft:villager, hangi chunk’larda olduklarını görürsün. Vanilla’da /execute if entity @e[type=minecraft:villager] kaç tanesinin yüklü olduğunu söyler.
Bir şey silmeden önce oyuncularla çiftlikleri hakkında konuş. Daha küçük bir çiftlik ya da chunk başına bir sınır çoğu zaman sorunu çözer. Köylü ticaret salonlarına ayrıca bakmak lazım: köylüler yol bulur, yatak ve meslek bloğu arar; bu da çoğu yaratıktan daha pahalıdır.
Yerdeki eşyaları temizlemen gerekiyorsa /kill @e[type=item], yüklü chunk’lardaki yerdeki bütün eşyaları siler. Önce herkesi uyar.
Kızıltaş ve huniler
Huni (hopper), her tick taşıyacak eşya var mı diye bakan bir blok varlığıdır. Tek bir huni neredeyse hiçbir şeye mal olmaz. Birkaç bin huniyle kurulmuş bir depo sistemi ya da bütün gün çalışan bir ayıklayıcı ise spark’ta açıkça blok varlığı işleme olarak görünür.
- Durmadan çalışan hızlı kızıltaş saatleri de sık görülür. Oyunculardan, yalnızca yakında biri varken işe yarayan saatlere bir kapatma anahtarı eklemelerini iste.
- Su akıntıları eşyaları uzun huni zincirlerinden daha ucuza taşır.
- Kızıltaşla beslenen bir huni kilitlenir ve eşya taşımayı bırakır; böylece işinin çoğu da durur.
Paper’ın bunun için config/paper-world-defaults.yml içinde ayarları var:
hopper:
cooldown-when-full: true
disable-move-event: false
misc:
redstone-implementation: VANILLA
disable-move-event: true, eklentilerin huni hareketini izlemek için kullandığı olayı atlar. Daha hızlıdır ama huni aktarımlarını koruyan ya da kaydeden eklentiler artık onları göremez. redstone-implementation: ALTERNATE_CURRENT büyük kızıltaş yapılarında çok daha hızlıdır, ancak vanilla’nın tuhaflıklarına dayanan birkaç düzenek farklı davranır; büyük yapıları sonradan test et. Fabric’te Alternate Current modu aynı işi görür.
spigot.yml içinde de ticks-per.hopper-transfer (varsayılan 8) ve ticks-per.hopper-check (varsayılan 1) var. Bunları yükseltmek hunileri yavaşlatır ve ucuzlatır, ama huni zamanlamasına dayanan kızıltaş düzeneklerini bozar. spark’ta en üst satır açıkça huniler değilse dokunma.
Bilmeye değer Paper ayarları
Paper’ın kendi ayarları config/paper-global.yml ve config/paper-world-defaults.yml dosyalarında, daha eski olanlar spigot.yml ve bukkit.yml dosyalarında durur. Çoğu sunucuda işe yarayan birkaçı:
bukkit.ymliçindekispawn-limits: spark raporunda yaratıklar büyük yer tutuyorsamonstersdeğerini varsayılan 70’in altına indir.spigot.ymliçindekientity-activation-range: oyunculardan uzaktaki varlıklar daha seyrek işlenir.spigot.ymliçindekimerge-radius: birbirine yakın yerdeki eşyalar ve deneyim küreleri tek bir varlıkta birleşir.paper-world-defaults.ymliçindekienvironment.optimize-explosions: true, TNT’nin ya da çok sayıda creeper’ın olduğu sunuculara iyi gelir.chunks.entity-per-chunk-save-limit, bir chunk kaydedilirken içinde kaç ok, deneyim küresi ve benzeri varlığın tutulacağını sınırlar.
Her seferinde tek bir şeyi değiştir ve spark ile yeniden ölç. Beş ayarı birden değiştirip TPS düzelirse hangisinin işe yaradığını da, demir çiftliğini hangisinin bozduğunu da bilemezsin. YouHaveTrouble’ın GitHub’daki topluluk Minecraft optimizasyon rehberi bu ayarları daha ayrıntılı anlatır. Hâlâ Spigot ya da vanilla kullanıyorsan, Paper’a geçmek çoğu zaman tek başına en büyük kazançtır: Paper, Spigot ve Purpur karşılaştırmasına bak.
Modlu sunucularda
Performans modları çok işe yarar. Fabric’te: oyun mantığı için Lithium, bellek için FerriteCore, chunk üretimi için C2ME. Forge ve NeoForge’da ModernFix ve FerriteCore yaygındır. Birçok pakette zaten bulunurlar; ikinci bir kopya eklemeden önce mods klasörüne bak.
Ölçme işi aynıdır. spark’ın Sources görünümü genelde tek bir modu gösterir: çoğu zaman büyük otomatik bir üssü olan bir teknoloji modu ya da yeni chunk’ları yavaşlatan bir dünya üretimi modu. Modlu arazi daha ağır üretildiği için Chunky ile önceden oluşturmak modlu dünyalarda vanilla’dan da fazla işe yarar. Sunucu ve oyuncular arasında mod sürümlerini eşleştirmek mod paketi rehberinde anlatılıyor.
Sorun bellekteyse
Daha fazla bellek düşük TPS’i düzeltmez. Tick’ler tek bir ana iş parçacığında çalışır; sunucunun yeterince belleği olduktan sonra fazladan RAM onları hızlandırmaz. Hızlı bir işlemci çekirdeği daha çok işe yarar.
Sorun bellekteyse logda java.lang.OutOfMemoryError görürsün, ya da /spark health ve spark raporunun GC bölümü uzun çöp toplama duraklamaları ve toplamanın hemen ardından bile sınıra yakın duran bir bellek gösterir. O zaman -Xmx değerini artır ve makinede Java’nın kendisi için de biraz bellek bırak. Oyuncu sayısına ve pakete göre boyutlar ve Aikar’ın parametreleri RAM rehberinde.
Sık sorulan sorular
Minecraft sunucusu için iyi bir TPS kaçtır?
20 TPS tam hızdır ve sunucunun çıkabileceği en yüksek değerdir. TPS sınıra ne kadar yakın olduğunu göstermez, bu yüzden MSPT’ye de bak: tick başına 50 ms’nin altı seni 20 TPS’te tutar, değer ne kadar düşükse yoğun anlar için o kadar pay kalır.
Daha fazla RAM lagı düzeltir mi?
Yalnızca sunucunun belleği yetmiyorsa. Bu da logda uzun çöp toplama duraklamaları ya da OutOfMemoryError olarak görünür. Tick’ler tek bir ana iş parçacığında çalışır; bellek yettikten sonra hızlı bir işlemci çekirdeği ve tick başına daha az iş, fazladan RAM’den çok daha fazla işe yarar.
Görüş ve simülasyon mesafesini kaç yapmalıyım?
Küçük bir survival grubu için simulation-distance 6 ile 8, view-distance 8 ile 10 arası mantıklı bir başlangıçtır. Önce simulation-distance değerini düşür, en çok işlemci tasarrufu ondan gelir. İkisinden birini değiştirdikten sonra sunucuyu yeniden başlat.
spark’ı açık bir sunucuda çalıştırmak güvenli mi?
Evet. spark, canlı sunucularda çalışmak için yapılmış örnekleme tabanlı bir profil aracıdır ve getirdiği yük küçüktür. Lag yaşanırken çalıştır, yoksa rapor sağlıklı bir sunucu gösterir.
Oyuncular keşfe çıkınca sunucu neden lag yapıyor?
Yeni chunk oluşturmak sunucunun yaptığı en ağır işlerden biridir. Oyuncuların kullanacağı alanı kimse çevrimiçi değilken Chunky ile önceden oluştur, sonra kimse dışına çıkmasın diye bir dünya sınırı koy.
Wispdock’un taslak paketleri vanilla ve eklentiler için 4 GB, mod paketleri için 8 GB. Ayrıntılar fiyatlar sayfasında; fiyatlar taslak ve sipariş henüz açık değil.
Hâlâ çözemedin mi? Ayrıntıları ve latest.log dosyanı bize gönder.