Menü
💬 Forum 🛒 Mağaza ⛏️ Sunucular ⚔️ Klanlar 📰 Blog 🏆 Liderlik 👥 Üyeler 🎖️ Rütbeler
1 üye online 👥 5 toplam üye 📝 Bugün 12 konu 💬 Bugün 12 mesaj

📖 Rehber Minecraft Sunucusunda JVM ve Garbage Collector Optimizasyonu

orginscorel · 1 gün önce · 1 gönderi · 0 görüntülenme
#1

Minecraft Sunucusunda JVM ve GC Optimizasyonu



Sunucunuzun donanımı yeterliyse ama TPS hâlâ düşüyorsa ya da bellek sorunları yaşıyorsanız, sorun büyük ihtimalle Java Sanal Makinesi'nin (JVM) yanlış yapılandırılmasından kaynaklanıyordur. Doğru JVM flag'leri, aynı donanımla çok daha iyi performans almanızı sağlar.

JVM Nedir, Neden Önemli?



Minecraft sunucusu Java'nın üzerinde çalışır. JVM, Java programlarını işletim sisteminde çalıştıran ara katmandır. Bellek yönetimi, çöp toplama (garbage collection) ve iş parçacığı yönetimi JVM tarafından yapılır. Bu parametreleri yanlış ayarlamak, gereksiz GC duraklamalarına ve TPS düşüşlerine yol açar.

Garbage Collector (GC) Seçimi



Java'nın birden fazla GC implementasyonu var. Minecraft sunucuları için en çok önerilen ikisi:


  • G1GC (Garbage First GC): Java 9+ varsayılanı. Büyük heap'lerde iyi çalışır, duraklamaları sınırlar. Çoğu sunucu için önerilir.
  • ZGC: Java 15+ ile birlikte geldi. Ultra düşük gecikme süresi. 16+ GB RAM olan sunucularda ciddi fark yaratır.


Önerilen Başlangıç Flag'leri (G1GC)




java -Xms4G -Xmx4G \
  -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 \
  -jar paper.jar nogui


-Xms ve -Xmx Hakkında Kritik Nokta



-Xms (başlangıç belleği) ve -Xmx (maksimum bellek) değerlerini her zaman eşit tutun. Neden?

Farklı tutulduğunda JVM, heap'i genişletmek zorunda kaldığında kısa süreli duraklamalar yaşar. Eşit tutulduğunda bu duraklamalar ortadan kalkar. 8 GB RAM'li bir sunucuda -Xms6G -Xmx6G şeklinde işletim sistemi için 2 GB bırakın.

Bellek Miktarı Ne Kadar Olmalı?




  • 1-20 oyuncu: 3-4 GB
  • 20-50 oyuncu: 5-7 GB
  • 50-100 oyuncu: 8-12 GB
  • 100+ oyuncu: 16+ GB, ZGC değerlendirilebilir


Aşırı bellek vermek de sorun çıkarır. JVM'e 30 GB RAM verdiğinizde GC döngüleri çok uzar; dengeyi koruyun.

GC Sorununu Nasıl Tespit Edersiniz?



-Xlog:gc*:file=gc.log:time,uptime:filecount=5,filesize=10m flag'ini ekleyin. GC log'u oluşur; ne kadar süre harcandığı görülür. "GC pause" süreleri 200ms'yi aşıyorsa parametrelerinizi gözden geçirin.

ZGC ile Geçiş



16+ GB RAM'iniz varsa ve minimum gecikme istiyorsanız:


java -Xms12G -Xmx12G \
  -XX:+UseZGC \
  -XX:+UnlockExperimentalVMOptions \
  -jar paper.jar nogui


JVM ayarları tek seferlik yapıp unutulan şeyler değil. Java sürümü ve sunucu versiyonu değiştikçe tekrar gözden geçirin.


Son Kontrol



Flag'leri değiştirdikten sonra /tps komutuyla TPS'i izleyin. 5-10 dakika oynayın, bellek kullanımını kontrol edin. GC duraklamalarının azaldığını ve TPS'in stabil kaldığını görmelisiniz.

Cevap yazabilmek için giriş yap.