io.netty hataları, Minecraft sunucusunun ağ katmanını yürüten Netty kütüphanesinden gelir ve hepsi tek bir şeyi anlatır: istemciyle sunucu arasındaki paket akışında bir sorun oluştu. Bu hataların hiçbiri oyun mantığıyla ilgili değildir; bu yüzden eklenti kurmak ya da dünyayı sıfırlamak çözüm getirmez. Doğru yaklaşım, hata sınıfının adını okuyup hangi katmanda tıkanma olduğunu belirlemektir.
Aşağıda en sık görülen dört Netty istisnasını, birebir metinlerini, hangi durumda ortaya çıktıklarını ve her biri için uygulanabilir çözümleri bulacaksınız. İçerik Minecraft 26.2 (protokol 776) dönemine göre yazıldı.
Hataların Birebir Metinleri#
io.netty.handler.timeout.ReadTimeoutException: null
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException:
readerIndex(12) + length(4) exceeds writerIndex(13)
io.netty.channel.AbstractChannel$AnnotatedConnectException:
Connection refused: no further information
io.netty.handler.codec.TooLongFrameException: Length 4194304 is larger than threshold 2097152
Sunucu logunda tipik bir kayıt şuna benzer:
[03:12:44] [Netty Server IO #2/ERROR]: io.netty.handler.codec.DecoderException:
io.netty.handler.codec.CorruptedFrameException: Badly compressed packet
at io.netty.handler.codec.ByteToMessageDecoder.decode(ByteToMessageDecoder.java:519)
[03:12:44] [Server thread/INFO]: oyuncuadi lost connection: Internal Exception: io.netty.handler.codec.DecoderException
Netty Server IO veya Netty Epoll Server IO etiketli iş parçacıklarında basılır. Bu etiket, hatanın ana tick thread’inde değil ağ katmanında oluştuğunun kesin işaretidir.Netty İstisnaları Teşhis Tablosu#
| İstisna | Anlamı | En sık nedeni | Bakılacak yer |
|---|---|---|---|
ReadTimeoutException | 30 sn boyunca paket gelmedi | Sunucu tick’te kilitlendi ya da istemci bağlantısı koptu | TPS, GC logu |
DecoderException | Paket çözümlenemedi | Sürüm uyuşmazlığı, çift sıkıştırma, bozuk eklenti | Protokol sürümü, proxy ayarı |
CorruptedFrameException | Paket çerçevesi bozuk | Sıkıştırma eşiği çakışması | network-compression-threshold |
AnnotatedConnectException | Bağlantı hiç kurulamadı | Port kapalı, süreç çalışmıyor | Connection refused sayfası |
TooLongFrameException | Paket boyut sınırını aştı | Devasa NBT verisi, kötü niyetli paket | Oyuncu envanteri, anti-cheat |
NativeIoException | Epoll seviyesinde IO hatası | Bağlantı zorla kapatıldı | Ağ yolu, DDoS filtresi |
OutOfDirectMemoryError | Netty doğrudan bellek havuzu doldu | Çok fazla eşzamanlı bağlantı veya bellek sızıntısı | -XX:MaxDirectMemorySize, eklenti eleme |
ReadTimeoutException: En Sık Görülen Varyant#
Bu istisna, Netty’nin ReadTimeoutHandler bileşeni tarafından atılır ve varsayılan eşik 30 saniyedir. Minecraft sunucusu her 15 saniyede bir keep-alive paketi gönderir; iki keep-alive üst üste cevapsız kalırsa bağlantı kesilir.
Sunucu tarafında görünüyorsa#
İstemci cevap vermemiştir. Tek bir oyuncuda tekrarlıyorsa o kişinin bağlantısı sorunludur. Aynı anda birden fazla oyuncuda görülüyorsa sunucu o saniyelerde donmuştur ve keep-alive’lara cevap verememiştir.
İstemci tarafında görünüyorsa#
Sunucu cevap vermemiştir. Bu neredeyse her zaman bir performans sorunudur. Kontrol edilecek üç şey vardır:
# Tick durumu
/tps
/spark tps
# GC duraklamalarını görmek için başlatma bayrağı ekleyin
-Xlog:gc*:file=logs/gc.log:time,uptime:filecount=5,filesize=10M
GC logunda 1 saniyeden uzun duraklamalar varsa neden bulunmuştur. 8–12 GB heap aralığında G1GC ve Aikar’s Flags kombinasyonu hâlâ en güvenli tercihtir:
java -Xms10G -Xmx10G \
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 \
-jar paper.jar nogui
16 GB ve üzeri heap ile ağır modlu sunucularda ZGC değerlendirilebilir. Doğru kullanım yalnızca -XX:+UseZGC biçimindedir; -XX:+ZGenerational bayrağı Java 25’te obsolete olmuştur.
DecoderException ve Sıkıştırma Sorunları#
Paket çözümleme hataları en sık proxy’li kurulumlarda görülür. Velocity veya BungeeCord arkasında çalışan alt sunucularda sıkıştırma iki kez uygulanırsa çerçeve bozulur.
-
Alt sunucularda sıkıştırmayı kapatın#
network-compression-threshold=-1 online-mode=false enable-status=falseSıkıştırma yalnızca proxy üzerinde kalsın. Proxy ile alt sunucular aynı yerel ağda olduğu için sıkıştırmanın faydası da zaten yoktur.
-
Velocity tarafında forwarding modunu doğrulayın#
# velocity.toml player-info-forwarding-mode = "modern" forwarding-secret-file = "forwarding.secret" compression-threshold = 256 compression-level = -1Alt sunucularda Paper kullanıyorsanız
config/paper-global.ymliçinde modern forwarding etkinleştirilmelidir. Yapılandırma adımları proxy kurulum sayfasında anlatıldı. -
Protokol sürümlerini karşılaştırın#
26.2 protokol 776, 26.1 protokol 775 kullanır. Proxy’nin desteklediği aralığın dışına çıkan bir alt sunucu decoder hatası üretir. Sürüm uyuşmazlığı belirtileri için Outdated server/client sayfasına bakın.
-
Eklentileri ikili aramayla eleyin#
pluginsklasöründeki eklentileri yarıya bölün, sunucuyu başlatın, hatanın devam edip etmediğine bakın. Beş adımda otuz eklenti arasından suçluyu bulabilirsiniz. Paket akışına dokunan eklentiler önceliklidir.
TooLongFrameException: Devasa Paketler#
Minecraft protokolünde bir paket için üst sınır vardır. Bu sınırın aşılması iki durumda olur: meşru ama aşırı büyük veri (iç içe geçmiş shulker kutuları, binlerce satırlık kitap, dev harita verisi) ya da kötü niyetli paket gönderimi.
[22:41:09] [Netty Server IO #1/ERROR]: io.netty.handler.codec.TooLongFrameException:
Length 4194304 is larger than threshold 2097152
Paper tarafında bu tip paketleri sınırlayan ayarlar bulunur:
# config/paper-global.yml
misc:
max-joins-per-tick: 3
packet-limiter:
all-packets:
interval: 7.0
max-packet-rate: 500.0
overrides:
ServerboundPlaceRecipePacket:
interval: 4.0
max-packet-rate: 5.0
action: DROP
OutOfDirectMemoryError: Netty Bellek Havuzu#
Netty, JVM heap’i dışında “direct memory” adı verilen ayrı bir bellek alanı kullanır. Bu alan dolduğunda sunucu heap’i boş olsa bile hata verir:
io.netty.util.internal.OutOfDirectMemoryError:
failed to allocate 16777216 byte(s) of direct memory (used: 1056964608, max: 1073741824)
Çözüm, doğrudan bellek sınırını açıkça belirtmektir. Heap dışında ek bellek ayıracağınız için toplam sistem belleğini hesaba katın:
java -Xms10G -Xmx10G -XX:MaxDirectMemorySize=2G -XX:+UseG1GC -jar paper.jar nogui
Bu hata tekrarlıyorsa altta yatan neden genelde bellek sızıntısıdır: kapanmayan bağlantılar, sürekli açılan kanal nesneleri veya hatalı bir eklenti. Heap dump alıp inceleme yöntemi Out of Memory sayfasında anlatıldı.
Sunucu Tarafı Ağ Ayarları#
| Ayar | Dosya | Önerilen değer | Açıklama |
|---|---|---|---|
network-compression-threshold | server.properties | 256 (proxy varsa -1) | Bu boyutun üstündeki paketler sıkıştırılır |
server-ip | server.properties | Boş | Tüm arayüzleri dinler |
rate-limit | server.properties | 0 | 0 = sınırsız; düşük değer oyuncu atar |
max-joins-per-tick | paper-global.yml | 3 | Aynı anda giren oyuncu sayısını sınırlar |
use-alternative-keepalive | paper-world-defaults.yml | false | Yalnızca sorun sürüyorsa deneyin |
-Dio.netty.leakDetection.level | JVM bayrağı | simple | Bellek sızıntısı araştırırken kullanılır |
Teşhis Araçları ve İndirmeler#
-
spark profilerÖnerilenİndir
-
Paper 26.2 sunucu jarİndir
-
Velocity ProxyKararlı: 4.0.0İndir
-
Eclipse Temurin JDK 25LTSİndir
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin. Velocity sayfasında en üstte görünen 4.1.0-SNAPSHOT bir geliştirme sürümüdür; üretimde 4.0.0 kararlı hattını kullanın.
Windows ve Linux Tarafında Hızlı Kontroller#
Bu sayfa işletim sisteminden bağımsızdır. Ağ katmanının sağlığını doğrulamak için:
Get-NetTCPConnection -LocalPort 25565 | Measure-Object
netstat -an | findstr :25565 | find /c "ESTABLISHED"
ss -tn state established '( sport = :25565 )' | wc -l
sudo dmesg | grep -i "nf_conntrack: table full"
İkinci Linux komutu önemlidir: bağlantı izleme tablosu dolduğunda çekirdek yeni bağlantıları sessizce düşürür ve bu Netty tarafında rastgele hatalar üretir. Kurulum ve sistem ayarları ayrıntıları Linux sunucu kurulumu ve Windows sunucu kurulumu sayfalarındadır.
İlgili Hata Sayfaları#
- Internal Exception hatası — Netty istisnalarının oyuncuya gösterilen hâli.
- Connection Timed Out hatası — zaman aşımının istemci tarafı görünümü.
- Can’t keep up uyarısı — tick gecikmesi timeout üretiyorsa.
- Tüm Minecraft sunucu hataları ve çözümleri — pillar rehber.
Özetle#
io.netty hataları ağ katmanının size verdiği geri bildirimdir ve her istisna sınıfı farklı bir yere işaret eder. ReadTimeoutException performans sorununun, DecoderException protokol veya sıkıştırma uyuşmazlığının, TooLongFrameException anormal büyüklükte verinin, OutOfDirectMemoryError ise bellek yönetiminin habercisidir. Çözüm sırası her zaman aynıdır: logdaki istisna adını okuyun, sunucu tick durumunu doğrulayın, proxy varsa sıkıştırmayı tek noktada bırakın, ardından eklentileri ikili aramayla eleyin. Tekrarlayan timeout’larda ağ ayarlarıyla değil, tick süresini kısaltan bir altyapıyla ilgilenmek gerekir.