Ubuntu 24.04'te Minecraft Snapshot Sunucusu Kurulumu ve Java 25 ZGC
Ubuntu 24.04 üzerinde Mojang snapshot sunucusu kurma, Java 25 Generational ZGC bellek optimizasyonu, Manifest API ve systemd yapılandırması.
İçindekiler
Minecraft topluluk yöneticileri ve oyuncuları, Mojang'ın yayınladığı yeni blokları, oyun mekaniklerini ve dünya üretim değişikliklerini genel sürüme çıkmadan önce denemek için snapshot sürümlerini tercih eder. Kararlı Paper veya Purpur sürümlerinden farklı olarak Mojang'ın doğrudan sunduğu snapshot derlemeleri, henüz üçüncü taraf eklenti optimizasyonlarına sahip değildir. Bu nedenle sunucunun akıcı çalışması, doğru Java çalışma zamanı kurulumuna ve yeni nesil çöp toplayıcı (Garbage Collector) ayarlarına doğrudan bağlıdır.
Ubuntu 24.04 LTS üzerinde resmî Mojang API uç noktalarını kullanarak en güncel snapshot sunucu dosyasını indirebilir, Java 25 Generational ZGC mimarisiyle tick gecikmelerini önleyebilir ve sunucuyu kalıcı bir systemd servisiyle yönetebilirsiniz.
Java 25 çalışma zamanı ve gerekli paketlerin kurulumu
Minecraft Java Edition snapshot sürümleri ve modern derlemeler en yüksek verim için Java 25 çalışma zamanı ile çalıştırılabilir. Ubuntu 24.04 üzerinde Eclipse Temurin JDK 25 paketlerini kurabilmek için resmî Adoptium paket deposu sisteme tanımlanır.
Paket listesini güncelleyin, gerekli yardımcı araçları kurun, Adoptium imza anahtarını ve paket deposunu ekleyerek Temurin 25 JDK kurulumunu tamamlayın:
apt update
apt install -y curl jq gnupg sudo
mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/keyrings/adoptium.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb noble main" | tee /etc/apt/sources.list.d/adoptium.list
apt update
apt install -y temurin-25-jdk
apt clean
Sunucu kullanıcısı ve dizin izolasyonu
Oyun sunucularını root kullanıcısıyla çalıştırmak olası güvenlik açıklarında tüm işletim sisteminin etkilenmesine yol açabilir. Bu nedenle sunucu dosyalarını barındıracak ayrıcalıksız bir sistem kullanıcısı ve çalışma dizini oluşturulmalıdır.
Aşağıdaki komut, oturum açma yetkisi sınırlandırılmış minecraft kullanıcısını ve /opt/minecraft-snapshot dizinini hazırlar:
useradd -r -m -d /opt/minecraft-snapshot -s /bin/bash minecraft
mkdir -p /opt/minecraft-snapshot
cd /opt/minecraft-snapshot
Mojang Manifest API üzerinden en güncel snapshot sunucu dosyasının indirilmesi
Mojang, Minecraft sürümlerini ve indirme bağlantılarını Version Manifest V2 API üzerinden dinamik olarak sunar. Web tarayıcısı üzerinden her hafta yeni bağlantı aramak yerine, resmî API sorgusu ile en son yayınlanan snapshot sürümünün indirme adresini otomatik olarak tespit edebilirsiniz.
Aşağıdaki komut bloğu API üzerinden en son snapshot kimliğini çeker, bu sürüme ait paket detaylarına ulaşır ve resmî server.jar dosyasını sunucu dizinine indirir:
cd /opt/minecraft-snapshot
MANIFEST_URL="https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" && \
SNAPSHOT_ID=$(curl -fsSL "${MANIFEST_URL}" | jq -r '.latest.snapshot') && \
VERSION_URL=$(curl -fsSL "${MANIFEST_URL}" | jq -r --arg id "${SNAPSHOT_ID}" '.versions[] | select(.id == $id) | .url') && \
DOWNLOAD_URL=$(curl -fsSL "${VERSION_URL}" | jq -r '.downloads.server.url') && \
curl -fsSL -o /opt/minecraft-snapshot/server.jar "${DOWNLOAD_URL}"
EULA onayı ve dosya izinlerinin yapılandırılması
Minecraft sunucusu ilk açılışta Mojang Son Kullanıcı Lisans Sözleşmesi onayı arar. Dizin içerisine eula=true satırını içeren yapılandırma dosyasını ekleyin ve indirilen tüm dosyaların sahipliğini minecraft kullanıcısına aktarın:
echo "eula=true" | tee /opt/minecraft-snapshot/eula.txt
chown -R minecraft:minecraft /opt/minecraft-snapshot
Sunucunun ilk kez başlatılması
Minecraft Java sunucuları istemci bağlantılarını standart olarak TCP 25565 portu (25565/tcp) üzerinden dinler. İlk çalıştırma sırasında sunucu gerekli dünya klasörlerini (world), sunucu ayar dosyasını (server.properties) ve temel verileri oluşturur:
# sunucuyu başlatır
cd /opt/minecraft-snapshot
sudo -u minecraft java -Xms2G -Xmx2G -XX:+UseZGC -XX:+AlwaysPreTouch -jar server.jar --nogui
Java 25 ve Generational ZGC ile JVM bellek optimizasyonu
Snapshot sunucularında optimizasyon yamaları bulunmadığı için dünya yükleme ve varlık hesaplamaları sırasında çöp toplayıcı duraklamaları (stop-the-world) yaşanabilir. Geleneksel G1GC çöp toplayıcısında sıkça görülen bu duraklamalar oyunda anlık takılmalara yol açar.
Generational ZGC (Z Garbage Collector), bellekteki nesneleri genç ve yaşlı nesiller olarak ayırır. Bu mimari sayesinde bellek temizleme işlemleri milisaniyenin altında tamamlanır ve oyuncuların hissettiği takılmalar ortadan kalkar.
- Generational ZGC aktivasyonu: Java 25 çalışma zamanında eski tek nesilli ZGC mimarisi tamamen kaldırılmıştır. Bu nedenle sunucu başlatılırken
-XX:+UseZGCparametresinin verilmesi, Generational ZGC mimarisini doğrudan ve eksiksiz olarak devreye alır. (Eski Java 21 ortamlarında bu mod için ek olarak-XX:+ZGenerationalbayrağı gerekmekteydi; Java 25'te bu bayrak gereksizdir ve tek başına-XX:+UseZGCyeterlidir.) - Bellek parçalanmasının önlenmesi:
-XX:+AlwaysPreTouchbayrağı, sunucu başlarken tahsis edilen tüm belleği fiziksel olarak hazırlar. Oyun sırasında işletim sisteminden dinamik sayfa tahsisi istenmesini engelleyerek ani FPS düşüşlerini önler. - -Xms ve -Xmx eşitlemesi: Başlangıç belleği ile maksimum belleğin eşit tanımlanması, Java sanal makinesinin bellek havuzunu genişletme çabasıyla ana döngüyü durdurmasını engeller.
- G1GC bayraklarının temizlenmesi: ZGC kullanılırken
MaxGCPauseMillisveyaG1ReservePercentgibi eski G1GC parametreleri kullanılmamalıdır; bu parametreler ZGC çalışma mantığıyla uyuşmaz.
Sunucu belleğini planlarken işletim sistemine ve disk önbelleğine pay bırakılması gerekir:
| VDS Toplam Belleği | Başlangıç (-Xms) | Maksimum (-Xmx) | Sistem ve Önbellek Payı |
|---|---|---|---|
| 4 GB | 2G | 2G | 2 GB |
| 8 GB | 6G | 6G | 2 GB |
| 16 GB | 12G | 12G | 4 GB |
| 32 GB | 24G | 24G | 8 GB |
Güvenlik duvarı yapılandırması
Sunucuda UFW (Uncomplicated Firewall) aktifse, oyuncuların dünyaya bağlanabilmesi için varsayılan oyun portuna izin verilmelidir:
ufw allow 25565/tcp
systemd ile arka planda otomatik servis yapılandırması
Sunucunun terminal oturumuna bağımlı kalmadan arka planda sürekli çalışması ve olası çökmelerde otomatik olarak yeniden başlaması için bir systemd servis birimi yapılandırılmalıdır:
cat <<'EOF' | tee /etc/systemd/system/minecraft-snapshot.service
[Unit]
Description=Minecraft Java Snapshot Sunucusu
After=network.target
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft-snapshot
ExecStart=/usr/bin/java -Xms2G -Xmx2G -XX:+UseZGC -XX:+AlwaysPreTouch -jar /opt/minecraft-snapshot/server.jar --nogui
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now minecraft-snapshot
Sunucu durumunun izlenmesi
Oluşturulan servisin çalışma durumunu denetlemek ve oyun içi olay günlüklerini canlı takip etmek için aşağıdaki komutlardan yararlanabilirsiniz:
# örnek, çalıştırma
systemctl status minecraft-snapshot
journalctl -u minecraft-snapshot -f
Snapshot sunucu performans sorunları için karar tablosu
Snapshot derlemelerinde karşılaşılan teknik problemlere yönelik ilk müdahale yöntemleri aşağıda listelenmiştir:
| Gözlenen Sorun | Olası Kök Neden | Uygulanacak İlk Müdahale |
|---|---|---|
| Dünya oluştururken anlık donma | Bellek sayfalarının geç tahsis edilmesi | JVM bayraklarına -XX:+AlwaysPreTouch ekleyin ve -Xms ile -Xmx değerlerini eşitleyin. |
| Canlılar hareket ederken tick gecikmesi | Çöp toplayıcı duraklaması | Çöp toplayıcıyı Generational ZGC (-XX:+UseZGC) moduna geçirin. |
| Sunucu başlarken bellek yetersizliği hatası | İşletim sistemi payının yetersiz kalması | -Xmx değerini sistem RAM'inin en fazla %75'i olacak şekilde düşürün. |
| Oyuncu bağlantısında zaman aşımı | Güvenlik duvarı engeli | 25565/tcp portunun güvenlik duvarında açık olduğunu teyit edin. |
| Yeni snapshot sürümüne geçememe | Eski jar dosyasının kilitli kalması | Servisi durdurup API üzerinden yeni derlemeyi çekin ve servisi yeniden başlatın. |
Altyapı seçimi ve ağ koruması
Minecraft Vanilla snapshot derlemeleri çekirdek seviyesinde optimizasyon içermediğinden, sunucu performansı doğrudan işlemcinin tek çekirdek saat hızına ve depolama hızına dayanır. Dünyadaki blok değişiklikleri ve kızıltaş mekanizmaları ana döngüde tek bir iş parçacığı üzerinden yürütülür.
Yüksek tek çekirdek frekansı gerektiren projeler için Ekstrem VDS paketlerinde AMD Ryzen 9 9950X işlemci ve DDR5 bellek sunulur. İşlemci çekirdekleri ayrılmış (dedicated) vCore olarak verilir ve Samsung 990 Pro Gen4 NVMe disklerle dünya kayıt gecikmeleri önlenir. Daha genel test ortamları için Performans VPS hattında AMD Ryzen 9 7950X işlemci yer alır. Sunucular Mars İstanbul Veri Merkezi altyapısında barındırılır ve 10 Gbps port hızıyla desteklenir.
Sunuculara yönelik ağ saldırılarına karşı TRSHIELD DDoS koruması her pakette ek ücret olmadan standart olarak yer alır. TRSHIELD 12 Tbps DDoS koruma kapasitesine sahiptir; bilinen bütün saldırı vektörlerine karşı koruma sağlar ve sürekli geliştirilir. TRSHIELD Minecraft Java profili sunucu listesindeki ping isteklerini doğrudan koruma noktasında yanıtlayarak sunucu işlemcisinin durum sorgularıyla yorulmasını engeller.
Yeni bir snapshot sürümüne geçmeden veya deneysel veri paketleri yüklemeden önce mevcut dünyanızı korumak için her VPS ve VDS paketinde 1 adet ücretsiz snapshot hakkı sunulur. Projeniz için oyun sunucusu çözümlerimizi inceleyebilir; kararlı eklenti kurulumu için Minecraft sunucusu kurma rehberimize göz atabilirsiniz.
Sık sorulan sorular
Minecraft snapshot sunucusu için neden Java 25 tercih edilmelidir?
Java 25, Generational ZGC mimarisini varsayılan ve kalıcı çöp toplayıcı olarak sunar. Eklenti optimizasyonu bulunmayan ham snapshot derlemelerinde dünya yükleme ve varlık hesaplama duraklamalarını milisaniyenin altına indirir.
Generational ZGC'nin Minecraft snapshot sunucularına faydası nedir?
Generational ZGC, bellek nesnelerini yaşlarına göre ayırarak çöp toplama duraklamalarını 1 milisaniyenin altına indirir. Bu durum, dünya yüklemeleri ve varlık hareketleri sırasında oluşan anlık takılmaları ve tick kayıplarını önler.
JVM parametrelerinde -Xms ve -Xmx neden eşit olmalıdır?
Başlangıç ve maksimum bellek miktarları eşitlendiğinde, işletim sistemi çalışma anında Java sanal makinesine yeni bellek tahsis etmek için duraklama yapmaz. Bellek havuzunun sabit kalması sunucu kararlılığını artırır.
Snapshot server.jar dosyası neden Manifest API üzerinden indirilir?
Mojang snapshot sürümlerini haftalık veya dönemsel olarak günceller. Version Manifest V2 API kullanıldığında en son yayınlanan snapshot sürümü ve indirme bağlantısı dinamik olarak çekilir, manuel dosya aramaya gerek kalmaz.