Minecraft Internal Exception hatası, oyunun kendisinden değil, istemciyle sunucu arasındaki ağ bağlantısından kaynaklanır. Oyuncu sunucudan atıldığında ekranda görünen “Internal Exception: java.io.IOException…” satırı, Minecraft’ın kullandığı Netty ağ kütüphanesinin yakaladığı bir istisnanın kullanıcıya gösterilen hâlidir. Yani hata mesajı size ne olduğunu değil, bağlantının koptuğunu söyler; gerçek neden ikinci satırdaki sınıf adında ve sunucu logunda saklıdır.
Bu sayfada hatanın tam metnini, hangi varyantın neye işaret ettiğini, tek oyuncu mu yoksa tüm sunucu mu etkilendiğini nasıl ayırt edeceğinizi ve her senaryo için uygulanabilir çözümleri bulacaksınız. İçerik Minecraft 26.2 “Chaos Cubed” (protokol 776) dönemine göre hazırlandı.
Hatanın Birebir Metni#
Oyuncunun ekranında gördüğü mesaj tipik olarak şu üç biçimden biridir:
Internal Exception: java.io.IOException: An existing connection was forcibly closed by the remote host
Internal Exception: java.io.IOException: Connection reset by peer
Internal Exception: io.netty.handler.codec.DecoderException:
java.lang.IndexOutOfBoundsException: readerIndex(6) + length(1) exceeds writerIndex(6)
Sunucu tarafında aynı olayın karşılığı logs/latest.log içinde şuna benzer:
[21:14:07] [Netty Server IO #3/ERROR]: java.io.IOException: Connection reset by peer
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:46)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
[21:14:07] [Server thread/INFO]: oyuncuadi lost connection: Internal Exception: java.io.IOException
lost connection: satırının saatini not edin. Aynı saniyede başka bir uyarı (uzun GC, düşük TPS, disk yazma) varsa neden orada demektir.Neden Olur? Belirti, Neden ve Çözüm Tablosu#
Internal Exception tek bir hata değil, bir hata ailesidir. Ekrandaki ikinci satır hangi aileye ait olduğunuzu söyler:
| Görünen alt mesaj | Olası neden | İlk yapılacak |
|---|---|---|
Connection reset by peer | Karşı taraf bağlantıyı RST ile kesti: istemci kapandı, filtre düşürdü veya sunucu dondu | Sunucu logunda aynı saniyeye bakın; TPS düşüşü var mı? |
An existing connection was forcibly closed | Windows istemcisinde aynı olayın karşılığı; genelde yerel ağ veya yönlendirici kaynaklı | Başka bir ağdan (mobil veri) test edin |
DecoderException: readerIndex … | Bozuk veya eksik paket; sürüm/protokol uyuşmazlığı ya da hatalı ViaVersion çevirisi | İstemci ve sunucu protokol sürümünü karşılaştırın |
SocketException: Network is unreachable | Sunucunun ağ arayüzü veya IPv6 yapılandırması | server-ip satırını boşaltın, IPv4 zorlayın |
ReadTimedOutException ile birlikte | Keep-alive paketi 30 saniye içinde dönmedi; sunucu tick döngüsü kilitlendi | io.netty hataları sayfasına geçin |
Badly compressed packet | Çift sıkıştırma; proxy ile alt sunucu arasında eşik çakışması | Alt sunucularda network-compression-threshold=-1 |
Birinci Ayrım: Tek Oyuncu mu, Herkes mi?#
Bu sorunun cevabı çözümün yönünü belirler ve iki dakikada alınır. Sunucuya bağlı oyuncu sayısını izleyin; hata bir kişide tekrarlıyorsa istemci tarafındasınız, aynı anda birden fazla kişi düşüyorsa sunucu tarafındasınız.
Tek oyuncu düşüyorsa#
- Oyuncunun internet bağlantısı veya Wi-Fi kalitesi
- PPPoE/VPN kaynaklı MTU sorunu
- İstemci tarafındaki modlar (özellikle ağ paketine dokunanlar)
- Antivirüs veya güvenlik yazılımının Java bağlantısını kesmesi
- Oyuncunun bulunduğu chunk’taki aşırı büyük NBT verisi (dolu shulker kutuları, dev harita)
Herkes düşüyorsa#
- Sunucuda uzun süren garbage collection duraklaması
OutOfMemoryErroryaklaşımı, heap doluluğu- Ana thread’i kilitleyen eklenti veya mod
- DDoS filtresi veya rate-limit kuralının yanlış tetiklenmesi
- Proxy (Velocity/BungeeCord) ile alt sunucu arasındaki kopma
Adım Adım Çözüm#
-
Sunucu logunu doğru satırdan okuyun#
Sunucu klasöründe
logs/latest.logdosyasını açın ve oyuncunun düştüğü saati arayın. Java yığın izinde asıl neden en alttakiCaused by:bloğudur. Yalnızcalost connectionsatırı varsa ve başka bir hata yoksa neden büyük olasılıkla istemci tarafındadır.grep -n "lost connection" logs/latest.log | tail -20Windows tarafında aynı iş için PowerShell:
Select-String -Path .\logs\latest.log -Pattern "lost connection" | Select-Object -Last 20 -
Sunucunun kendi üzerinden test edin#
Sunucu makinesinden ya da aynı veri merkezindeki başka bir makineden
localhost:25565adresine bağlanın. Buradan sorunsuz oynayabiliyorsanız sunucu yazılımı sağlamdır ve hata ağ yolundadır. Bağlantı burada da kopuyorsa sorun sunucu sürecinin içindedir. -
RAM ve TPS durumunu kontrol edin#
Konsolda
/tpsyazın. Değer 20’nin belirgin altındaysa ya daCan not keep upuyarıları akıyorsa sunucu tick’leri kaçırıyor demektir; bu doğrudan bağlantı kopmalarına yol açar. Sunucunuz 8 GB’ın altında bir pakette çalışıyorsa Internal Exception hatalarının kaynağı büyük ihtimalle budur.java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled ^ -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions ^ -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -jar paper.jar noguiHeap değerlerini paketinize göre ayarlayın: 8 GB pakette
-Xms6G -Xmx6G, 12 GB pakette-Xms10G -Xmx10G, 16 GB pakette-Xms14G -Xmx14G. Ayrıntılar için RAM ve JVM flag ayarları sayfasına bakın. -
server.properties içindeki ağ ayarlarını gözden geçirin#
server-ip= server-port=25565 network-compression-threshold=256 prevent-proxy-connections=false rate-limit=0server-ipsatırı boş olmalıdır; buraya yanlış bir adres yazılması sunucunun yalnızca o arayüzü dinlemesine ve bazı bağlantıların düşmesine neden olur.rate-limitdeğeri 0’dan farklıysa hızlı paket gönderen oyuncular sunucu tarafından kickleniyor olabilir. Tüm anahtarların açıklaması server.properties rehberinde var. -
Proxy kullanıyorsanız sıkıştırmayı tek noktada bırakın#
Velocity veya BungeeCord arkasındaki alt sunucularda paket iki kez sıkıştırılırsa
Badly compressed packetvereaderIndexhataları görülür. Alt sunucuların her birinde şu satırı ayarlayın:network-compression-threshold=-1 online-mode=falseDikkatonline-mode=falseyalnızca alt sunucular dış dünyaya kapalıysa ve proxy üzerinde IP forwarding doğru yapılandırıldıysa güvenlidir. Alt sunucu portlarını güvenlik duvarıyla kapatın; aksi halde herkes istediği isimle girebilir. Kurulum ayrıntıları proxy kurulum sayfasındadır. -
MTU sorununu istemci tarafında test edin#
Sadece belirli oyuncular düşüyorsa ve bu kişiler PPPoE ya da VPN kullanıyorsa MTU parçalanması muhtemeldir. Şu komutla en büyük geçebilen paket boyutu ölçülür:
ping sunucu-adresiniz.com -f -l 1472Yanıt “Packet needs to be fragmented but DF set” ise değeri 1400’e kadar düşürerek deneyin. Geçen en büyük değere 28 ekleyip ağ bağdaştırıcısının MTU değerini o sayıya çekmek gerekir. Linux istemcide karşılığı:
ping -M do -s 1472 sunucu-adresiniz.com -
Eklenti ve modları ikili aramayla eleyin#
Hata belirli bir eklenti eklendikten sonra başladıysa, eklentileri yarıya bölerek deneyin. Ağ paketine dokunan eklentiler (ProtocolLib tabanlı olanlar, özel tab-list ve scoreboard eklentileri, anti-cheat yazılımları) bu hatanın en sık kaynağıdır. 26.1 ile gelen unobfuscation nedeniyle NMS kullanan eski eklentiler yeniden derlenmeden çalışmaz; bu eklentiler yarım paket üretip Internal Exception döktürebilir.
Sürüm ve Protokol Uyuşmazlığı Kaynaklı Varyant#
DecoderException ve readerIndex içeren mesajlar neredeyse her zaman paket yapısının iki taraf arasında farklı yorumlandığını gösterir. Protokol sürümleri şu şekildedir:
| Minecraft sürümü | Protokol | Gerekli Java | Durum |
|---|---|---|---|
| 26.2 “Chaos Cubed” | 776 | Java 25 | Güncel kararlı |
| 26.1 “Tiny Takeover” | 775 | Java 25 | Desteklenen |
| 1.20.5 – 1.21.11 | Sürüme göre değişir | Java 21 | Eski hat |
| 1.16.5 ve öncesi | Sürüme göre değişir | Java 8 | Eskimiş |
Farklı istemci sürümlerini aynı sunucuda kabul etmek istiyorsanız ViaVersion ailesini kullanın. Ancak çeviri katmanı arttıkça paket bozulma riski de artar; özellikle 1.8 istemcilerini 26.2 sunucusuna bağlarken ViaRewind zinciri devreye girer ve Internal Exception vakaları çoğalır.
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin.
Windows ve Linux Tarafında Hızlı Kontroller#
Bu sayfa işletim sisteminden bağımsızdır; aşağıdaki komutlar sunucu makinesinde ağ katmanının sağlığını doğrulamak içindir.
Sunucunun portu gerçekten dinliyor mu:
netstat -ano | findstr :25565
Get-NetTCPConnection -LocalPort 25565 -State Listen
sudo ss -tulpn | grep 25565
sudo journalctl -u minecraft -n 100 --no-pager
Windows ortamında güvenlik duvarı kuralı ve RDP tabanlı yönetim ayrıntıları için Windows sunucu kurulumu rehberine, Linux tarafında UFW, systemd ve kullanıcı izinleri için Linux sunucu kurulumu rehberine bakın.
Kalıcı Çözüm İçin Donanım Tarafı#
Internal Exception hatalarının önemli bir bölümü aslında gizli bir performans sorunudur: sunucu bir tick’te takılır, keep-alive paketine cevap veremez, istemci bağlantıyı düşürür. Bu nedenle ağ tarafında yaptığınız her ayar, altyapı yetersizse geçici kalır.
| Sunucu profili | RAM | İşlemci | Disk |
|---|---|---|---|
| 2–10 oyuncu, vanilla/hafif eklentili | 8 GB | Ryzen 9 3900X ve üzeri | 50 GB NVMe |
| 10–30 oyuncu, eklentili Paper | 10–12 GB | Ryzen 9 7900X | 80 GB NVMe |
| 30–60 oyuncu, çok dünyalı | 16 GB | Ryzen 9 7900X / 7950X | 100 GB NVMe |
| 60+ oyuncu veya proxy’li ağ | 32 GB ve üzeri | Ryzen 9 7950X | 200 GB NVMe |
Minecraft’ın ana tick döngüsü tek çekirdekte çalıştığı için çekirdek sayısı değil saat hızı belirleyicidir. Paylaşımlı vCPU üzerinde çalışan sunucularda tick süreleri düzensizleşir ve bağlantı kopmaları rastgele görünür. Doğru donanım seçimi için donanım seçimi rehberini inceleyin.
Hâlâ Çözülmediyse Ne Yapmalı?#
Yukarıdaki adımlar sonuç vermediyse hatayı daraltmak için şu sırayı izleyin:
- Sunucuyu boş bir klasörde, eklentisiz ve modsuz temiz bir Paper 26.2 kurulumu ile açıp aynı hatanın tekrarlayıp tekrarlamadığını görün.
- Hata temiz kurulumda yoksa eklentileri gruplar hâlinde geri ekleyin.
- Hata temiz kurulumda da varsa sorun ağ yolundadır: veri merkezi, DDoS filtresi veya oyuncu tarafındaki ISP.
- spark ile bir profil çıkarıp tick sürelerinde ani sıçrama olup olmadığını kontrol edin. Yöntem için spark ve timings analizi sayfasına bakın.
- Çökme kaydı oluşmuşsa crash report okuma rehberiyle yığın izini çözümleyin.
İlgili Hata Sayfaları#
- io.netty hataları ve ReadTimeoutException — Internal Exception ile aynı ailedendir, zaman aşımı odaklıdır.
- Connection Timed Out hatası — bağlantı hiç kurulamadığında görülür.
- Connection Refused hatası — sunucu portu kapalıysa veya süreç çalışmıyorsa.
- Tüm Minecraft sunucu hataları ve çözümleri — pillar rehber.
Özetle#
Internal Exception hatası bir ağ katmanı hatasıdır ve tek başına neden bildirmez. İzlenecek yol nettir: hatayı alan kişi sayısını belirleyin, sunucu logundaki aynı zaman damgasını okuyun, TPS ve RAM durumunu doğrulayın, proxy varsa sıkıştırma eşiğini tek noktada bırakın, tek oyuncu etkileniyorsa MTU ve istemci modlarını test edin. Sunucunuz 8 GB’ın altında bellek veya paylaşımlı vCPU üzerinde çalışıyorsa yapılacak her ağ ayarı yalnızca semptomu erteler; kalıcı çözüm yüksek saat hızlı Ryzen ve NVMe tabanlı bir altyapıya geçmektir.