Watchdog crash, adının aksine bir çökme değil, bir kilitlenme kaydıdır. Minecraft sunucusunun ana iş parçacığı — yani oyunun tüm mantığını saniyede 20 tick olarak işleyen döngü — belirlenen süre boyunca tek bir tick’i bitiremezse, arka planda bekleyen watchdog iş parçacığı devreye girer. Sunucunun kilitlendiğine karar verir, o anda çalışan bütün iş parçacıklarının yığın dökümünü konsola basar ve süreci zorla sonlandırır. Varsayılan süre 60 saniyedir ve bu değer server.properties içindeki max-tick-time ile belirlenir.
Bu sayfada watchdog’un tam olarak neyi ölçtüğünü, konsola basılan dökümde hangi satırın okunacağını (kısaca: Current Thread bloğundaki en üstteki yabancı paket adı), donmanın gerçek sebebini nasıl bulacağınızı ve neden max-tick-time değerini büyütmenin bir çözüm değil semptom gizleme olduğunu bulacaksınız. Örnekler Minecraft 26.2 ve Paper üzerinden verildi, ancak yöntem Spigot, Purpur, Forge ve Fabric sunucularında aynıdır.
Watchdog tam olarak ne yapar?#
Minecraft sunucusu tek bir ana döngü etrafında kurulur. Her tick’te oyuncular, mob’lar, redstone devreleri, hopper’lar, chunk yüklemeleri ve eklenti olayları sırayla işlenir. Sağlıklı bir sunucuda bir tick 50 milisaniyeden kısa sürer; 50 ms’yi aşarsa TPS düşer. Watchdog bu döngünün sağlığını değil, tamamen durup durmadığını izler.
Bekçi iş parçacığı ana döngüden bağımsız çalışır ve düzenli aralıklarla “son tick ne zaman tamamlandı?” diye bakar. Aradaki fark max-tick-time değerini aşarsa iki şey yapar: önce tanı için tam bir iş parçacığı dökümü basar, sonra süreci kapatır. Kapatma bilinçli bir tercihtir — çünkü kilitlenmiş bir sunucu, kendini kapatan sunucudan daha kötüdür. Kapanan sunucu otomatik yeniden başlar; kilitlenen sunucu oyuncuları saatlerce bağlantı zaman aşımına iter.
Buradaki ayrımı iyi kurun: watchdog TPS düşüklüğüyle ilgilenmez. Sunucunuz haftalardır 14 TPS ile sürünüyor olabilir, watchdog tek bir satır bile basmaz — çünkü tick’ler geç de olsa tamamlanıyordur. Watchdog yalnızca hiç tamamlanmayan tick’le ilgilenir. Bu yüzden watchdog dökümü, elinizdeki en keskin teşhis aracıdır: gürültüsüz, tek bir ana odaklanmış ve tam olarak sorunlu kod satırını gösteren bir kayıt.
crash-reports/ klasörüne dosya bırakmaz. Kayıt doğrudan logs/latest.log içine düşer. Günlük dosyalarında gezinmeyi sunucu logları nasıl okunur sayfasında anlattık.Konsolda göreceğiniz satırlar#
Vanilla sunucuda watchdog iki satırla kendini belli eder. İlk satır tick’in ne kadar sürdüğünü, ikinci satır kararı söyler:
[12:04:31] [Server Watchdog/FATAL]: A single server tick took 60.00 seconds (should be max 0.05)
[12:04:31] [Server Watchdog/FATAL]: Considering it to be crashed, server will forcibly shutdown.
Paper ve türevlerinde çıktı daha ayrıntılıdır ve baştan bir uyarı içerir: bu bir Paper hatası değildir, önce eklentilere bakın. Sonrasında asıl işe yarayan bölüm gelir:
[12:04:31] [Server Watchdog/ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---
[12:04:31] [Server Watchdog/ERROR]: The server has stopped responding! This is (probably) not a Paper bug.
[12:04:31] [Server Watchdog/ERROR]: ------------------------------
[12:04:31] [Server Watchdog/ERROR]: Server thread dump (Look for plugins here before reporting to Paper!):
[12:04:31] [Server Watchdog/ERROR]: ------------------------------
[12:04:31] [Server Watchdog/ERROR]: Current Thread: Server thread
[12:04:31] [Server Watchdog/ERROR]: PID: 32 | Suspended: false | Native: false | State: RUNNABLE
[12:04:31] [Server Watchdog/ERROR]: Stack:
Bu satırların altında onlarca iş parçacığı listelenir: Netty ağ iş parçacıkları, chunk havuzu işçileri, GC iş parçacıkları, eklentilerin kendi zamanlayıcıları. Tamamını okumaya kalkmayın. İşin aslı, dökümün geri kalanı çoğu zaman tamamen alakasızdır.
Dökümde okunacak tek yer: Current Thread#
Watchdog dökümünde teşhis koyduran tek blok Current Thread: Server thread başlığının altındaki Stack: listesidir. Ana iş parçacığı donduğu anda hangi metodun içinde beklediğini bu liste gösterir. Yığın izi yukarıdan aşağı okunur: en üstteki satır o anda çalışan metot, altındakiler onu çağıran metotlardır.
Kural şu: java.base, net.minecraft ve org.bukkit satırlarını atlayın, gözünüz ilk yabancı paket adını arasın. Üçüncü taraf bir paket adı gördüğünüz an suçlu bulunmuştur. Aşağıdaki örnek gerçek bir donma senaryosunu temsil ediyor:
Current Thread: Server thread
PID: 32 | Suspended: false | Native: false | State: RUNNABLE
Stack:
java.base@25.0.4/java.net.SocketInputStream.read(SocketInputStream.java:168)
com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63)
com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:989)
net.ornekeklenti.ekonomi.BakiyeDeposu.bakiyeGetir(BakiyeDeposu.java:118)
net.ornekeklenti.ekonomi.GirisDinleyici.onPlayerJoin(GirisDinleyici.java:41)
org.bukkit.plugin.java.JavaPluginLoader.execute(JavaPluginLoader.java:306)
net.minecraft.server.players.PlayerList.placeNewPlayer(PlayerList.java:242)
Bu dökümü sondan başa okuyun: bir oyuncu sunucuya girdi, Bukkit olay sistemi eklentinin dinleyicisini çağırdı, dinleyici veritabanından bakiye çekmek istedi, MySQL sürücüsü yanıt beklerken soket okumasında takıldı. Ana iş parçacığı bu bekleyiş boyunca hiçbir şey yapamadı ve tick 60 saniyeyi aştı. Suçlu net: net.ornekeklenti.ekonomi paketi, yani o eklenti.
Current Thread bloğunu değil, üstündeki sürüm satırlarını da ekleyin. Sunucu yazılımı sürümü, Java sürümü ve eklenti sürümü olmadan gelen raporlar çoğu projede kapatılıyor. Crash raporlarının genel anatomisi için crash report okuma rehberine bakın.Donmanın gerçek sebepleri#
Watchdog dökümlerinin büyük çoğunluğu birkaç kalıptan birine oturur. Aşağıdaki tablo, yığın izinde göreceğiniz ipucuna göre sebebi ve doğru müdahaleyi eşleştiriyor.
| Sebep | Yığın izindeki ipucu | Doğru müdahale |
|---|---|---|
| Ana iş parçacığında senkron veritabanı sorgusu | com.mysql.cj, java.sql, SocketInputStream.read | Sorguyu asenkron çalıştıran sürüme geçin, bağlantı havuzu ve zaman aşımı tanımlayın |
| Senkron HTTP veya API çağrısı | java.net.http, HttpURLConnection.getInputStream | Eklentiyi güncelleyin; sürüm kontrolü, webhook veya lisans doğrulaması yapan eklentiler tipik suçludur |
| Devasa chunk üretimi | net.minecraft.world.level.chunk, ChunkGenerator | Dünyayı önceden üretin, ışınlanma yarıçapını sınırlayın |
| Sonsuz döngüye giren Skript veya eklenti | Aynı paket adı yığında üst üste tekrarlar | Döngü koşulunu düzeltin, betiği geçici olarak devre dışı bırakın |
| Entity yığılması ve hopper zincirleri | LevelChunk.tick, HopperBlockEntity | Entity limitlerini sıkın, yerdeki eşyaları temizleyin |
| Yavaş veya dolu disk | RegionFile, RandomAccessFile.write | NVMe SSD kullanın, disk doluluğunu ve yedek betiklerini kontrol edin |
İlk iki satır listenin en sık görülenleridir ve ikisinin de kökeni aynıdır: bir eklenti, ağ üzerinden yanıt beklemesi gereken bir işi ana iş parçacığında yapıyor. Ekonomi, giriş sistemi, ceza yönetimi ve istatistik eklentileri bu hatayı en çok yapan gruptur. Veritabanı bağlantısını doğru kurmak için MySQL bağlama rehberindeki havuz ve zaman aşımı ayarlarını uygulayın; chunk üretimi kaynaklı donmalar içinse chunk ön üretimi sayfası tek kalıcı çözümü anlatıyor.
Sonsuz döngü konusunda özel bir not: Skript ile yazılan betikler ana iş parçacığında çalışır ve while koşulu asla sağlanmazsa sunucuyu bir saniyede kilitler. Bu tür bir dökümde yığında kendi betik dosyanızın adını görürsünüz. Entity kaynaklı yavaşlamalarda ise yerdeki eşyaları ve entity temizleme ayarları donmanın eşiğini belirgin şekilde düşürür.
spark ile donmayı canlı yakalamak#
Yığın dökümü size donmanın fotoğrafını verir; spark ise filmini. Sunucuya spark eklentisini kurun ve uzun tick’leri hedefleyen bir profil başlatın. Aşağıdaki komut yalnızca 100 ms’yi aşan tick’leri kaydeder, yani normal çalışmayı gürültü olarak toplamaz:
/spark profiler start --timeout 300 --only-ticks-over 100
/spark profiler stop
/spark tps
/spark health --memory
/spark gc
Forge ve Fabric sunucularında komut öneki /sparkc, BungeeCord’da /sparkb, Velocity’de /sparkv olabilir. Profil bittiğinde spark bir bağlantı verir; o sayfada hangi eklentinin hangi metodunun kaç milisaniye harcadığını ağaç halinde görürsünüz. Rapor okumanın ayrıntıları spark ve timings analizi sayfasında.
Erken uyarı dökümlerini kaçırmayın#
Paper, sunucu tamamen kapanmadan önce ara dökümler basar. Bunlar konsolda “The server has not responded for X seconds” biçiminde belirir ve donmanın başlangıcını gösterir. Nihai döküm ise donmanın altmışıncı saniyesindeki fotoğraftır — bazen o noktada asıl sebep yığından çoktan çıkmış olur. Bu yüzden bir watchdog vakasını incelerken günlükte en son dökümü değil, ilk erken uyarı dökümünü okuyun. İki döküm farklı paket adları gösteriyorsa doğru olan neredeyse her zaman ilkidir.
Erken uyarıların ne sıklıkla basılacağını config/paper-global.yml içindeki early-warning-every belirler. Varsayılan beş saniyedir ve düşürmeye gerek yoktur; donma sırasında zaten onlarca döküm birikir. Vanilla, Forge ve Fabric sunucularında erken uyarı özelliği bulunmadığı için orada tek şansınız nihai dökümdür — teşhis penceresi dar olduğundan bu sunucularda spark kurmak daha da önemlidir.
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin.
Watchdog ayarları hangi dosyada?#
Üç farklı yerde watchdog ile ilgili ayar bulunur ve karıştırılmaları çok yaygındır:
- server.properties
max-tick-time=60000— vanilla watchdog’un milisaniye cinsinden eşiği.-1watchdog’u tamamen kapatır. Tüm anahtarların listesi server.properties rehberinde.- spigot.yml
settings.timeout-time— Spigot ve Paper tarafındaki karşılığı, saniye cinsinden ve varsayılanı 60. Ayrıcarestart-on-crashverestart-scriptanahtarları sunucunun kapandıktan sonra kendini yeniden başlatmasını sağlar.- config/paper-global.yml
watchdog.early-warning-everyvewatchdog.early-warning-delay— Paper, sunucu tamamen kapanmadan önce erken uyarı dökümleri basar. Bu dökümler donmanın başlangıcını gösterdiği için teşhiste en değerli çıktılardır.
# server.properties
max-tick-time=60000
# spigot.yml
# settings:
# timeout-time: 60
# restart-on-crash: true
# restart-script: ./start.sh
max-tick-time=-1 yazan rehberleri uygulamayın. Bu satır donmayı çözmez; sunucunun kilitlendiğini fark eden mekanizmayı devre dışı bırakır. Sonuç, kapanmayan ama kimseyi içeri almayan bir sunucudur — ve artık elinizde teşhis için kullanabileceğiniz bir yığın dökümü de olmaz.Süreyi uzatmak neden çözüm değil?#
Watchdog eşiğini 60 saniyeden 180 saniyeye çıkardığınızda tek değişen şey şu olur: sunucu artık üç dakika kilitli kaldıktan sonra kapanır. Oyuncular yine düşer, dünya yine kaydedilemez, sorun yine yerinde durur. Eşik bir tolerans ayarı değil, alarm eşiğidir. Alarmın sesini kısmak yangını söndürmez.
Tek istisna, kontrollü ve geçici durumlardır: çok büyük bir dünyada tek seferlik bir dönüştürme işlemi yapıyorsanız ya da devasa bir modpack’i ilk kez açıyorsanız, o oturuma özel olarak eşiği yükseltmek mantıklı olabilir. İşlem bittiğinde değeri varsayılana döndürün. Kalıcı olarak yüksek bırakılan bir max-tick-time, aylar sonra kimsenin sebebini hatırlamadığı bir donma alışkanlığı üretir.
Kalıcı çözüm: adım adım#
-
Dökümü saklayın#
Sunucu yeniden başlamadan önce
logs/latest.logdosyasının bir kopyasını alın. Yeni açılış bu dosyayı arşivleyip sıfırlar ve elinizdeki tek kanıt kaybolabilir. Linux tarafındagrep -n "Current Thread" logs/latest.log, Windows tarafındaSelect-Stringile ilgili satır numarasını bulun. -
Suçlu paketi belirleyin#
Current Thread: Server threadbloğunda ilk yabancı paket adını bulun. Bu ad genelde eklentinin jar dosyasındaki paket yapısıyla eşleşir; hangisi olduğundan emin değilseniz jar’ı bir arşiv programıyla açıp klasör adına bakın. -
Eklentiyi güncelleyin ya da değiştirin#
Çoğu donma, eklentinin bilinen bir sürüm hatasıdır ve güncel sürümde düzeltilmiştir. 26.1 ile gelen unobfuscated yapıdan sonra eski derlemelerin 26.x üzerinde beklenmedik davranışlar gösterdiğini de unutmayın; eklentinin 26.2 etiketli sürümünü kullanın.
-
Ölçerek doğrulayın#
Değişikliğin işe yarayıp yaramadığını hislerinize göre değil, spark çıktısına göre karara bağlayın. Bir hafta boyunca
/spark tpsve erken uyarı dökümlerini takip edin. Donma tekrar etmiyorsa çözüm doğrudur. -
Altyapıyı gözden geçirin#
Yığın izinde sürekli
net.minecraftsatırları görüyorsanız sorun eklentide değil kaynaklardadır. Ana tick döngüsü tek çekirdekte çalıştığı için saat hızı yüksek bir AMD Ryzen 9 ve NVMe SSD şarttır; gerekçeler donanım seçimi sayfasında.
Sık yapılan yanlış müdahaleler#
RAM eklemek#
Watchdog donmalarının çoğu bellekle ilgili değildir. Heap’i büyütmek soket üzerinde yanıt bekleyen bir sorguyu hızlandırmaz. Bellek gerçekten darsa yığın izinde GC iş parçacıkları ve OutOfMemoryError izleri görürsünüz; doğru heap değerleri RAM ayarları sayfasında, çöp toplayıcı tarafındaki karar ise GC seçimi rehberinde anlatılıyor.
Rastgele JVM bayrağı denemek#
İnternette bulunan bayrak yığınlarını arka arkaya eklemek durumu iyileştirmez, çoğu zaman kötüleştirir. Bayrakların ne işe yaradığını bilerek kullanın; Aikar’s Flags sayfası her bayrağı tek tek açıklıyor.
Sunucuyu sık sık yeniden başlatmak#
Otomatik yeniden başlatma bir bant yardımıdır, tedavi değil. Donmayı gizler ve siz sebebi arayacağınıza saatlik restart’lara alışırsınız. Kaldı ki her restart oyuncu kaybettirir.
Watchdog’u kapatıp devam etmek#
Bu maddeyi tekrar yazıyoruz çünkü destek taleplerinde en sık gördüğümüz şey bu: max-tick-time=-1 yazıp sorunu geçmiş sanmak. Sonrasında gelen ikinci talep hep aynı oluyor — “sunucu açık görünüyor ama kimse giremiyor”. Herşey aslında ilk müdahalede başlıyor.
Özetle#
Watchdog crash, sunucunuzun bozulduğunu değil, tek bir tick’in tamamen takıldığını söyler. Dökümde okunacak yer tektir: Current Thread: Server thread bloğundaki yığın izinin en üstündeki yabancı paket adı. O ad bir eklenti ya da mod gösteriyorsa sebep bellidir; yalnızca net.minecraft satırları varsa gözünüzü diske, entity yoğunluğuna ve chunk üretimine çevirin. max-tick-time değerini büyütmek ya da -1 yapmak bu tablonun hiçbir yerini değiştirmez, sadece alarmı susturur.
Donmayı ölçerek kovalayın: spark profili, erken uyarı dökümleri ve gerekirse eklentileri ikiye bölerek yapılan eleme yöntemi neredeyse her vakayı çözer. Altyapı tarafında yüksek saat hızlı işlemci ve NVMe disk isteyen bir yapı kuruyorsanız Minecraft sunucu paketlerine göz atabilir, elinizdeki dökümü yorumlamakta zorlanırsanız kaydı ekleyerek destek talebi açabilirsiniz. Hızlı bir kontrol listesi için de TPS düşüklüğü çözüm sayfası iyi bir devam noktası; oradaki adımların çoğu watchdog eşiğine hiç yaklaşmadan sorunu yakalar.