Ekran Kartlı Sunucu Satışları Başladı. İncele
Minecraft Hata Çözümleri

Minecraft “Out of Memory” (OutOfMemoryError) Hatası Çözümü

java.lang.OutOfMemoryError: Java heap space hatasının nedenleri, doğru Xmx değeri, bellek sızıntısı tespiti ve kalıcı çözüm adımları.

  • 7 dk okuma
  • Güncelleme:
  • Yayın:
  • Batihost Teknik Ekibi

Kısaca Özet

  • java.lang.OutOfMemoryError: Java heap space hatası, sunucunun -Xmx ile verilen bellek sınırını doldurduğu anlamına gelir. Çözüm her zaman “RAM artır” değildir.
  • Önce ayrımı yapın: yetersiz heap mı, yoksa bellek sızıntısı mı? Sızıntıda RAM artırmak sadece çökmeyi erteler.
  • Heap değerleri pakete göre verilir: 8 GB pakette -Xms6G -Xmx6G, 12 GB’de -Xms10G -Xmx10G, 16 GB’de -Xms14G -Xmx14G, 32 GB’de -Xms28G -Xmx28G. Xms ve Xmx daima eşit olur.
  • Modlu sunucularda alt sınır 16 GB, büyük modpacklerde 24–32 GB’dır. Vanilla ve hafif eklentili sunucularda bile 8 GB’ın altına inmeyin.

Minecraft sunucusunda Out of Memory hatası, JVM’in -Xmx ile belirlenen bellek üst sınırına ulaşıp yeni nesne oluşturamamasıdır. Hata düştüğü anda sunucu ya tamamen çöker ya da saniyeler süren garbage collection döngülerine girip pratikte kullanılamaz hâle gelir. İlk refleks genelde “RAM artıralım” olur; oysa vakaların önemli bir kısmında sorun bellek miktarında değil, belleği bırakmayan bir eklenti ya da modda saklıdır.

Bu sayfada hatanın birebir metnini, yetersiz bellek ile bellek sızıntısını ayırt etme yöntemini, doğru heap değerlerini ve sızıntı avlama adımlarını bulacaksınız. Değerler Minecraft 26.2 ve Java 25 LTS temel alınarak verildi.

Hatanın Birebir Metni#

[04:18:33] [Server thread/ERROR]: Encountered an unexpected exception
java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.Arrays.copyOf(Arrays.java:3537)
	at net.minecraft.world.level.chunk.LevelChunkSection.<init>(LevelChunkSection.java:41)

java.lang.OutOfMemoryError: Metaspace

java.lang.OutOfMemoryError: GC overhead limit exceeded

io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory

Bazı durumlarda sunucu hiç hata basmadan aniden kaybolur. Bu, işletim sisteminin OOM killer mekanizmasının Java sürecini sonlandırdığını gösterir:

sudo dmesg | grep -i "killed process"
# Out of memory: Killed process 3241 (java) total-vm:18234112kB
BilgiJava kendi hatasını basmadan süreç ölüyorsa neden JVM değil, işletim sistemidir. Bu durumda -Xmx değeri makinenin fiziksel belleğinden fazladır ya da aynı makinede başka süreçler belleği tüketmektedir.

Neden Olur? Belirti, Neden ve Çözüm Tablosu#

Hata varyantıAnlamıEn sık nedeniÇözüm
Java heap spaceNesne alanı dolduYetersiz heap veya sızıntıHeap ayarı, sızıntı avı
GC overhead limit exceededGC zamanın %98’ini harcıyor, %2 alan kazanıyorHeap kritik derecede yetersizHeap artırın, yük azaltın
MetaspaceSınıf tanımı alanı dolduTekrarlanan /reload, çok sayıda eklenti/reload kullanmayı bırakın
OutOfDirectMemoryErrorNetty doğrudan bellek havuzu dolduÇok fazla bağlantı veya kanal sızıntısı-XX:MaxDirectMemorySize=2G
unable to create native threadİş parçacığı sınırıEklenti kontrolsüz thread açıyorEklenti eleme, sistem limitleri
Sessiz ölüm (dmesg’te killed)OS belleği bitirdiXmx fiziksel RAM’den büyükSisteme pay bırakın
OutOfMemoryError varyantları ve çözümleri

Birinci Ayrım: Yetersiz Bellek mi, Sızıntı mı?#

Bu ayrımı bellek kullanım eğrisine bakarak yaparsınız. Konsolda spark kuruluysa:

/spark health
/spark heapsummary

İki tipik desen vardır:

Yetersiz heap#

Bellek kullanımı yüksek seviyede dalgalanır, GC sonrası belirgin biçimde düşer ama tavan sürekli zorlanır. Oyuncu sayısı arttıkça hata sıklaşır, sunucu yeniden başlatıldığında saatlerce sorunsuz çalışır.

Bellek sızıntısı#

Bellek kullanımı zamanla düzenli biçimde artar ve GC sonrası bile eski seviyeye dönmez. Oyuncu sayısından bağımsız olarak birkaç saat içinde çökme gelir. Yeniden başlatmak yalnızca sayacı sıfırlar.

Grafik sürekli tırmanıyor ve GC sonrası taban seviye her seferinde yükseliyorsa sızıntı vardır ve RAM artırmak çözüm değildir.

Doğru Heap Değerleri#

Sunucu paketiHeap ayarıUygun senaryoİşlemci
8 GB-Xms6G -Xmx6G2–10 oyuncu, vanilla veya hafif eklentiliRyzen 9 3900X ve üzeri
12 GB-Xms10G -Xmx10G10–30 oyuncu, eklentili PaperRyzen 9 7900X
16 GB-Xms14G -Xmx14G30–60 oyuncu, minigame veya modpackRyzen 9 7900X / 7950X
32 GB-Xms28G -Xmx28G60+ oyuncu, büyük modpack, sunucu ağıRyzen 9 7950X
Pakete göre önerilen Java heap değerleri
DikkatHeap değerini makinenin toplam belleğine eşitlemeyin. İşletim sistemi, Netty’nin doğrudan bellek havuzu ve JVM’in kendi ek yapıları için pay gerekir. Ayrıca -Xms ile -Xmx her zaman eşit verilmelidir; farklı değerler heap yeniden boyutlandırma duraklamaları üretir.

Tam başlatma komutu 12 GB’lık bir paket için şöyle görünür:

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:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 \
 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 \
 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 \
 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 \
 -XX:MaxDirectMemorySize=2G \
 -jar paper.jar nogui

Windows tarafında aynı komut start.bat içine yazılır:

@echo off
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled ^
 -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions ^
 -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=2G ^
 -jar paper.jar nogui
pause

Betik oluşturma ayrıntıları start.bat dosyası oluşturma sayfasında, tüm JVM bayraklarının anlamı RAM ayarları ve JVM flag rehberinde var.

Çöp Toplayıcı Seçimi: G1GC mi ZGC mi?#

Bu konuda dolaşan yanlış bilgiler nedeniyle netleştirelim. 26.1 ile duyurulan “G1GC yerine ZGC” değişikliği istemci tarafı bir düzenlemedir ve Minecraft Launcher’ın JVM varsayılanını değiştirir. Sunucu jar’ının launcher’ı yoktur; çöp toplayıcıyı tamamen sizin verdiğiniz bayraklar belirler. Java 25’te G1 hâlâ JVM’in genel varsayılanıdır, dolayısıyla bayraksız çalıştırılan bir 26.x sunucusu ZGC değil G1GC kullanır.

8–12 GB heap
G1GC + Aikar’s Flags. Bu doküman geri çekilmemiştir ve 26.x sunucularında hâlâ geçerlidir.
16 GB ve üzeri heap
ZGC değerlendirilebilir. Doğru kullanım yalnızca -XX:+UseZGC biçimindedir.
Ağır modlu sunucu
Büyük heap ile ZGC duraklama sürelerini kısaltabilir; ancak toplam verim biraz düşer.
Uyarı-XX:+ZGenerational bayrağını kullanmayın. JEP 490 ile ZGC’nin non-generational modu kaldırıldı ve bu bayrak Java 25’te obsolete oldu; uyarı basar ve ileride hataya dönüşebilir.

Bellek Sızıntısını Bulma#

  1. Heap dump alın#

    JVM’i hata anında otomatik dump alacak biçimde başlatın:

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/minecraft/dumps

    Sunucu çalışırken elle dump almak için:

    jcmd $(pgrep -f paper.jar) GC.heap_dump /opt/minecraft/dumps/heap.hprof
    jcmd (Get-Process java).Id GC.heap_dump C:\minecraft\dumps\heap.hprof
  2. spark ile hızlı özet çıkarın#

    Tam bir dump analizi yapmadan önce spark’ın özeti çoğu zaman yeterlidir:

    /spark heapsummary
    /spark health --memory

    Çıktıda en çok yer kaplayan sınıflar listelenir. Bir eklentinin paket adına ait sınıflar listenin üstündeyse suçlu bulunmuş demektir.

  3. Şüpheli eklentileri eleyin#

    Bellek sızıntısı en sık şu tiplerde görülür: sürekli veri toplayan log/istatistik eklentileri, harita render eklentileri, çok sayıda entity yöneten eklentiler ve düzgün kapanmayan veritabanı bağlantıları. Eklentileri yarıya bölerek deneyin.

  4. /reload komutunu bırakın#

    /reload, eklentileri yeniden yükler ama eski sınıf yükleyicileri her zaman serbest bırakılmaz. Bu doğrudan Metaspace dolmasına ve sızıntıya yol açar. Yapılandırma değiştirdiğinizde sunucuyu tamamen yeniden başlatın.

  5. Entity ve chunk yığılmalarını temizleyin#

    Binlerce item entity, aşırı büyük hayvan çiftlikleri ve sürekli yüklü tutulan chunk’lar heap’i doldurur. Paper tarafında sınırlar:

    # config/paper-world-defaults.yml
    entities:
      spawning:
        despawn-ranges:
          monster: { hard: 96, soft: 32 }
        per-player-mob-spawns: true
    chunks:
      max-auto-save-chunks-per-tick: 8
      prevent-moving-into-unloaded-chunks: true

    Ayrıntılı optimizasyon için paper.yml optimizasyon rehberine bakın.

Modlu Sunucularda Durum#

Forge ve Fabric modpackleri vanilla sunucudan kat kat fazla bellek tüketir. Her mod kendi kayıt tablolarını, blok ve eşya tanımlarını, tarif listelerini belleğe yükler. Bu yüzden modlu sunucularda alt sınır 16 GB’dır; 200 modun üzerindeki paketlerde 24–32 GB gerekir.

Bellek optimizasyonu için indirilecekler
  • FerriteCoreBellek optimizasyonu Fabric / NeoForge.jarÜcretsiz
    İndir
  • Lithium (oyun mantığı optimizasyonu) Fabric / NeoForge / Forge.jar
    İndir
  • spark profiler Paper / Fabric / Forge.jar
    İndir
  • Eclipse Temurin JDK 25LTS Windows / Linux.msi / .tar.gz
    İndir

Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin.

FerriteCore, blok durumu ve NBT verilerini daha verimli saklayarak modlu sunucularda kayda değer bellek tasarrufu sağlar. Modpack kurulum ve seçim önerileri modpack rehberinde ve modlu sunucu paketleri modlu sunucu sayfasında yer alıyor.

Bellek Kullanımını İzlemek#

Sorunu çözdükten sonra tekrar etmediğinden emin olmak için izleme kurun. Basit bir kontrol:

jcmd $(pgrep -f paper.jar) GC.heap_info
free -h
top -b -n 1 -p $(pgrep -f paper.jar)
Get-Process java | Select-Object Id,@{n='RAM_MB';e={[math]::Round($_.WorkingSet64/1MB)}}
Get-Counter '\Memory\Available MBytes'

Uzun vadeli izleme için Prometheus, Grafana ya da panelin kendi grafiklerini kullanabilirsiniz. Yöntemler sunucu izleme rehberinde anlatıldı.

İpucuBellek tükenmesi çoğu zaman yanlış boyutlandırılmış bir pakette barınmanın sonucudur. Sunucunuz sürekli tavan yapıyorsa bir üst pakete geçmek, GC ile boğuşmaktan hem daha ucuz hem daha kalıcıdır. Paketleri karşılaştırma sayfasından inceleyebilirsiniz.

Çökme Sonrası Yapılacaklar#

  1. Dünya bütünlüğünü kontrol edin#

    OOM sırasında yazılmakta olan bölge dosyaları yarım kalmış olabilir. Sunucuyu açtıktan sonra konsolda Region file … is corrupted uyarısı arayın.

  2. Crash report ve heap dump saklayın#

    crash-reports/ klasöründeki dosyayı ve varsa .hprof dump’ı silmeyin; nedeni bulmanın en somut kanıtlarıdır. Okuma yöntemi crash report rehberinde anlatıldı.

  3. Yedekten geri dönmeyi değerlendirin#

    Dünyada bozulma varsa son sağlam yedeğe dönmek, kırık chunk’larla devam etmekten daha güvenlidir. Otomatik yedek kurulumu için yedekleme rehberine bakın.

İlgili Hata Sayfaları#

Özetle#

OutOfMemoryError, heap sınırının dolduğunu söyler ama nedeni söylemez. İlk iş bellek eğrisine bakıp yetersiz heap ile sızıntıyı ayırmaktır: dalgalanan ama GC sonrası düşen grafik yetersizliği, sürekli tırmanan grafik sızıntıyı gösterir. Heap değerlerini paketinize göre verin, Xms ile Xmx’i her zaman eşitleyin ve sistem tarafına pay bırakın. 8–12 GB heap aralığında G1GC ve Aikar’s Flags kullanın; 16 GB üzerinde ZGC değerlendirilebilir, ama yalnızca -XX:+UseZGC biçiminde. Sızıntı şüphesinde heap dump alıp spark ile inceleyin ve /reload kullanmayı tamamen bırakın.

Sıkça Sorulan Sorular#

Minecraft Out of Memory hatası neden olur?

Sunucu, JVM’e -Xmx ile tanımlanan bellek üst sınırına ulaştı ve yeni nesne oluşturamadı. İki temel nedeni vardır: sunucunun iş yükü için verilen heap gerçekten yetersizdir ya da bir eklenti veya mod belleği bırakmayıp sızdırmaktadır. İkisini ayırt etmeden RAM artırmak kalıcı çözüm getirmez.

Minecraft sunucusuna ne kadar RAM vermeliyim?

2–10 oyunculu vanilla veya hafif eklentili sunucularda 8 GB, 10–30 oyunculu eklentili Paper sunucularında 10–12 GB, 30–60 oyunculu çok dünyalı sunucularda 16 GB önerilir. Forge veya Fabric modpackleri için alt sınır 16 GB’dır, büyük modpacklerde 24–32 GB gerekir. 60 üzeri oyuncu veya proxy’li ağlarda 32 GB ve üzerine çıkın.

Xms ve Xmx neden eşit olmalı?

Xms başlangıç, Xmx üst sınır heap boyutudur. İkisi farklı olduğunda JVM çalışma sırasında heap’i büyütüp küçültür; bu işlem duraklamalar üretir ve tick süresini bozar. Eşit verildiğinde bellek en baştan ayrılır, -XX:+AlwaysPreTouch ile de fiziksel olarak dokunulur ve çalışma sırasında sürpriz yaşanmaz.

RAM artırdım ama hata devam ediyor.

Bu, klasik bellek sızıntısı belirtisidir. Bir eklenti veya mod, artık kullanılmayan nesneleri serbest bırakmıyordur; heap ne kadar büyütülürse büyütülsün eninde sonunda dolar. Sızıntıyı bulmak için heap dump alıp analiz edin veya eklentileri ikili aramayla eleyin. Sürekli artan bellek grafiği kesin işarettir.

Metaspace hatası ile heap space hatası aynı şey mi?

Hayır. Java heap space nesnelerin tutulduğu alanın dolmasıdır. Metaspace ise sınıf tanımlarının tutulduğu ayrı bir bölgedir; genelde çok sayıda eklentinin sürekli yeniden yüklenmesiyle dolar. /reload komutunu tekrar tekrar kullanmak bu hatanın en yaygın sebebidir.

Sunucuya makinenin tüm RAM&rsquo;ini verebilir miyim?

Hayır. İşletim sistemi, Netty’nin doğrudan bellek havuzu, JVM’in kendi ek yapıları ve disk önbelleği için pay bırakmanız gerekir. Pratik kural, toplam belleğin yaklaşık dörtte birini sistem tarafına ayırmaktır. 16 GB’lık bir makinede heap için 14 GB uygundur, 16 GB vermek takas kullanımına ve donmalara yol açar.

Out of Memory hatasında dünya verisi bozulur mu?

Bozulabilir. Sunucu bellek yetersizliğiyle çöktüğünde o an yazılmakta olan chunk dosyaları yarım kalabilir. Bu yüzden OOM sonrası sunucuyu hemen yeniden başlatmak yerine önce yedekten kontrol yapmak daha güvenlidir. Düzenli otomatik yedekleme bu riski büyük ölçüde ortadan kaldırır.

Minecraft Hata Çözümleri — Tüm Rehberler#

  1. Minecraft Sunucu Hataları ve Çözümleri
  2. Minecraft “Internal Exception” Hatası Çözümü
  3. Minecraft “Connection Refused” Hatası ve Çözümü
  4. Minecraft “Connection Timed Out” Hatası Çözümü
  5. “Outdated Server” ve “Outdated Client” Hatası Çözümü
  6. Minecraft io.netty Hataları ve Çözüm Yolları
  7. Minecraft “Failed to Bind to Port” Hatası Çözümü
  8. Minecraft “Out of Memory” (OutOfMemoryError) Hatası Çözümü
  9. Minecraft “Can’t keep up! Is the server overloaded?” Uyarısı
  10. “Unable to access jarfile server.jar” Hatası Çözümü
  11. Minecraft EULA Hatası: “You need to agree to the EULA”
  12. Minecraft “Invalid Session” Hatası Çözümü
  13. Minecraft Java Sürüm Hatası (UnsupportedClassVersionError)
  14. Minecraft Crash Report Nasıl Okunur?

Bu rehber Batihost teknik ekibi tarafından hazırlanmış ve tarihinde güncellenmiştir. Eksik veya hatalı bulduğunuz bir bilgi varsa bize bildirin.

Başa dön