MinecraftTR 3,851 Konusu 21,672 Mesajı ve 7,387 Üyesi ile her dakika daha da büyüyor!
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı
MinecraftTR Reklam Alanı

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
Merhabalar
Bu konumda sizlere uzun süre test edip kullandığım ve bir çok tecrübe edinerek geliştirdiğim optimize edilmiş başlatma kodunu tanıtıp paylaşacağım.
Öncelikle özellikleri açıklayıp daha sonra kodu aşağıya bırakıyorum. Ondan sonrasında da yapmanız gereken değişiklikleri ve her kodun teker teker ne iş yaptığını açıklayacağım.

Özellikler
  • Özel CMD penceresi başlığı.
  • Bilgilendirici echo mesajları.
  • Tamamen optimize edilmiş java argümanları.
  • Otomatik bazı gereksiz dosyaları temizler.
  • Sunucu çökünce / kapanınca otomatik reset atma (tekrar açma) fonksiyonu.
  • Konsolu ve Java'yı UTF-8 yapar ve Türkçe karakterleri kullanıma açar

Uyumluluk
Kod, Java 8 / JDK 8 gerektirir.
JDK 8 üstünde (örn. JDK 11) çalıştırmak istiyor iseniz spoiler içindeki alternatif versiyonu kullanın.

Kodumuz
Bash:
@echo off
chcp 65001 > nul
title Sunucu Yonetim Kontrol Paneli
:start
echo Sunucu aciliyor...
java -XX:+UnlockExperimentalVMOptions -d64 -server -Xms1M -Xmx8G -XX:-HeapDumpOnOutOfMemoryError -XX:SoftRefLRUPolicyMSPerMB=1000 -XX:-UseCompressedOops -XX:+TieredCompilation -XX:+UseLWPSynchronization -XX:+UseBiasedLocking -XX:+UseFastAccessorMethods -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+UseLargePagesInMetaspace -XX:+AggressiveOpts -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Duser.language=EN -Duser.country=US -Dpaper.playerconnection.keepalive=120 -Dlog4j.skipJansi=true -jar LifeSpigot.jar -nojline -o false --log-strip-color --log-append=false nogui
echo Sunucu kapandi. Yeniden baslatilmasini istemiyor iseniz pencereyi kapatin.
echo Gunluk temizlik baslatiliyor..
echo Dosyalar siliniyor...
del \plugins\NoCheatPlus\*.log /q
del \plugins\NoCheatPlus\*.lck /q
del \plugins\NoCheatPlus\*.log.* /q
del \plugins\AntiAura\logs\*.* /q
del \plugins\AuthMe\authme.log /q
del \plugins\bStats\temp.txt /q
echo Dosya silme basarili, sunucu yeniden baslatiliyor..
timeout 5 > nul
goto start
Bash:
@echo off
[SIZE=5]chcp 65001 > nul[/SIZE]
title Sunucu Yonetim Kontrol Paneli
:start
echo Sunucu aciliyor...
java -XX:+UnlockExperimentalVMOptions -server -Xms1M -Xmx8G -XX:-HeapDumpOnOutOfMemoryError -XX:SoftRefLRUPolicyMSPerMB=1000 -XX:-UseCompressedOops -XX:+TieredCompilation -XX:+UseLWPSynchronization -XX:+UseBiasedLocking -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+UseLargePagesInMetaspace -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Duser.language=EN -Duser.country=US -Dpaper.playerconnection.keepalive=120 -Dlog4j.skipJansi=true -jar LifeSpigot.jar -nojline -o false --log-strip-color --log-append=false nogui
echo Sunucu kapandi. Yeniden baslatilmasini istemiyor iseniz pencereyi kapatin.
echo Gunluk temizlik baslatiliyor..
echo Dosyalar siliniyor...
del \plugins\NoCheatPlus\*.log /q
del \plugins\NoCheatPlus\*.lck /q
del \plugins\NoCheatPlus\*.log.* /q
del \plugins\AntiAura\logs\*.* /q
del \plugins\AuthMe\authme.log /q
del \plugins\bStats\temp.txt /q
echo Dosya silme basarili, sunucu yeniden baslatiliyor..
timeout 5 > nul
goto start


Değiştirmeniz Gerekenler
1) İlk olarak maksimum RAM miktarını değiştirmelisiniz. -Xmx8G kısmını, makinenizin toplam RAM miktarı - 1 veya - 2 olarak ayarlamanızı tavsiye ederim. Eğer değiştirmez iseniz "insufficient memory", "unable to launch jvm" veya "out of memory" tarzı hatalar alabilirsiniz.

2) İkinci olarak -jar LifeSpigot.jar kısmını değiştirmelisiniz. Buradaki LifeSpigot.jar kısmını sizde artık "spigot.jar" veya "craftbukkit.jar" olabilir, onun ile değiştirmelisiniz. Değiştirmez iseniz "unable to access jarfile LifeSpigot.jar" tarzı bir hata alabilirsiniz.

Daha sonrasında herhangi bir şey değiştirmenize gerek yok fakat okumaya devam etmenizi tavsiye ederim.


Değiştirmenizi Önerdiklerim
Bunları değiştirmeseniz de olur fakat sadece önerimdir.

İlk olarak echo off dan sonraki satırda bulunan title Sunucu Yonetim Kontrol Paneli kısmını değiştirmeniz tavsiyem. Özellikle eğer BungeeCord kullanıyor ve bir çok sunucunun CMD penceresini aynanda açık olarak ekranda görünüyor iseniz hepsinin aynı başlığa sahip olması karışıklık çıkaracaktır. Hepsine "Faction Yonetim Kontrol Paneli" tarzı isimler verip ayırabilirsiniz. Örneğin verdiğim örmek için kod "title Faction Yonetim Kontrol Paneli" olmalı, iki tırnak işaretleri olmadan tabii. Bir de türkçe karakter kullanmamanız tavsiyem.

-XX:+DisableExplicitGC: Bu ayar RAM kullanımını biraz daha esnekleştirir ve GC'leri azaltarak donmaları azaltmayı hedefler. İsterseniz kapatabilirsiniz, RAM kullanımınız yüksek ise ilk olarak bunu silip tekrar deneyin.

-Djava.awt.headless=true: Bu ayar makinede ekran olmadığını belirtiyor yani GUI vs. açan uygulamalar çalışmıyor. Sunucu da zaten bu tür şeyler genelde olmaz. Başka bir oyuna veya client'e uyarlayacak iseniz bunu kaldırmanız tavsiyem.

-Dlog4j.skipJansi=true: Eğer sunucu başlangıcında "WARN unable to insaniaite org.fusesource.jansi .." tarzı bir hata alıyor iseniz bu ayar onu kapatıyor. Altını çiziyorum çözmüyor, kapatıyor. Gereksiz bir uyarı mesajı sadece. Zaten -nojline ile JLine'ı kapatıyoruz.

-nojline: JLine, yani konsolda yazıların oyun içindeki renk kodları gibi renkli olmasını ve üst tuşuna basarak konsola girdiğimiz komutları tekrar etmemizi sağlayan kütüphaneyi kapatmaya yarıyor. Bir performans artışı sağlar belki fakat ben zaten renkli olunca karışık olduğunu düşündüğüm ve makineden konsola zaten nadiren baktığım için (log dosyaları diye bir şey var) JLine'ın kapalı kalması daha mantıklı geliyor.

-o false: Bu ayar online-mode'u kapatıyor. Yeni spigot sürümlerinde kaldırıldı diye hatırlıyorum. Emin olmak için eklemiş olabilirim. Siz kaldırabilirsiniz.

nogui: BukkitGUI tarzı programlar kullanıyor iseniz kaldırabilirsiniz. Bukkit'in içine çok eski sürümlerde gömülü olan bir sistem vardı onu kapatıyor diye hatırlıyorum. Şuanda bir işlevi var mı bir bilgim yok bu ayarın.

del XX.log /q vb. kısımlar: Bunlar otomatik bazı gereksiz bulduğum log ve geçici dosyaları siliyor. Ne kadar gerekli bilinmez. Bir artı sağlamıyor bana ama uzun zamandır ekli olan bir kod. Silmekte özgürsünüz.


JVM Argümanları ve Anlamları
Bu kısımı normal bir kullanıcı iseniz okumanıza gerek yok. Buraya kadar çok okudunuz bile, tebrikler :D Yinede okumak istiyorsanız okuyabilirsiniz, ekstra bilgi hiç bir zaman kötü değildir.

JVM argümanları, veya daha doğru bir deyiş ile JVM komut satırı başlatma argümanları, bir kaç şekle ayrılır.

İlk olarak en çok kullanılan direk -ayar şeklinde yazılan ayarlar. Mesela -Xms1M gibi.
İkinci olarak kullanıcı parametreleri. Mesela -Duser.language=EN gibi.
Üçüncü olarak -XX: ile başlayan gelişmiş ayarlar.

Bu gelişmiş ayarlarda eğer -XX: den sonra - var ise o o ayarın kapatılacağı, + var ise açılacağı anlamına gelir.

Gelişmiş ayarlar genelde normal ayarlar kadar güvenli değildir.
Bende bu kodlar hakkında herhangi bir garanti sağlamıyorum fakat kendi sunucumda uzun süredir kullandığımı ve bir çok sunucunun kullanıp memnun olduğunu söyleyebilirim.

Her neyse.. Şimdi uzun kısma gelelim. Sizin için teker teker her özellik, ayar ne işe yarıyor açıklamaya çalıştım.
Buyrunuz:


JVM Argümanlarının Anlamları

-XX:+UnlockExperimentalVMOptions: Bazı gelişmiş ayarların kilidini açmaya yarıyor.
-d64: JVM'yi 64-bit JVM olarak ayarlıyor. Zaten 64-bit JVM yükledi iseniz bu 64-bit seçiyor otomatik diye biliyorum fakat bu emin olmak için :D
-server: JVM'yi önceden konfigüre edilmiş sunucular için önerilen ayarlar ile donatıyor.
-Xms1M: Sunucunun 1MB ram ile başlayıp sadece ihtiyacı olduğunda RAM yemesini sağlıyor.
-Xmx8G: Maksimum RAM miktarını 8GB olarak belirliyor. Bu RAM miktarı aşıldığında JVM otomatik Out Of Memory hatası verecektir.
-XX:-HeapDumpOnOutOfMemoryError: Out Of Memory hatasına karşın head dump yapmayı kapatıyor. Head dump yapmak eğer işletim sistemininde RAM miktarı az kalmış ise durumu daha kötü etkiler, eğer geliştirici iseniz ve bu Out Of Memory hatası uygulamanızın basit şekilde çok fazla thread açmasından kaynaklanmıyor ise, sorunu çözmek ve kaynağını tespit etmek için başındaki - yi + yaparak head dump özelliğini açabilirsiniz.
-XX: SoftRefLRUPolicyMSPerMB=1000: Soft Reference objelerinin ne kadar süre boyunca hayatta kalacağını yani GC ile öğütülmeyeceğini belirliyor. Varsayılan değer bu sanırım ama yine de kalabilir.

-XX:+UseCompressedOops: Sıkıştırılan obje kullanmayı falan aktifleştiriliyordu sanırım. Bu argümanların çoğunu Oracle'nin sitesinde farklı makalelerde listelerde buldum diye hatırlıyorum.
-XX:+TieredCompilation: Java kodu Native koda dönüştürülür iken birden fazla thread kullanarak daha hızlı dönüştürme yapmaya yarıyordu diye hatırlıyorum.
-XX:+UseLWPSynchronization: Daha lightweight bir senkronize sistemi kullanmaya yarıyordu sanırım, bu şekilde performans artışı sağlıyor.
-XX:+UseBiasedLocking: Lock sistemini değiştiriyor ve yine daha lightweight bir sisteme geçiriyor diye hatırlıyorum.
-XX:+UseFastAccessorMethods: Methodlara daha hızlı erişmeye yarayan bir özelliği açıyor.
-XX:+UseG1GC: G1GC çöp toplayıcı (GC) sistemini kullanması konusunda JVM'ye bilgi veriyor.
-XX:+UseStringDeduplication: Bu ayar birden fazla kullanılan string objeleri için aynı objeyi kullanıyor. Kısaca aynı değeri temsil eden yazılar için bir den fazla string objesi açılmıyor. String cache tarzı bir sistem yani.
-XX:+ParallelRefProcEnabled: Paralel olarak referans objelerini işlemeyi açıyor. Paralel multi-threaded demek yani aynanda birden fazla iş yapılabiliyor.
-XX:+UseLargePagesInMetaspace: Metaspace adlı bellek bölümünde large pages denen sistemi kullanıyor.
-XX:+AggressiveOpts: JVM'nin bazı güvensiz optimizeleri yapmasına izin veriyor. Güvensiz değilde daha çok experimental, JDK11 de bu ayar kaldırılıp default oldu sanırım.

-XX:+DisableExplicitGC: Bu ayar bu kod arasında en çok tartışma yaratacak kod belkide. RAM kullanımını yükselttiği doğrudur. Fakat RAM kullanımını yükselten bu değil. Zaten -Xms1M sayesinde 1MB ile başlayıp ihtiyacı olunca yükselmesini ayarlamıştık. Yani kısaca bu koddan sonra RAM kullanımı artar ise o sizin sunucunuzun yediği RAM'dir. Sadece eğer bu ayarı kaldırır iseniz o RAM sürekli azaltılmaya çalışır ve JVM uygulama taraflı gelen güvensiz GC isteklerini de işler, bu da daha fazla GC demek. Eğer React tarzı bir eklenti otomatik GC yapıyor ise ve bu donmalara neden olabiliyor ise bu kod onu çözecektir fakat RAM kullanımını arttıracaktır. Bu arada RAM kullanımının artmasının hiç bir zararı yok. JVM ihtiyacı olduğunda hala GC yapacaktır. Bu kod GC'yi kapatmaz sadece kullanıcı kodundan gelen GC isteklerini yoksayar, yani sadece gerçekten ihtiyacı olduğunda GC yapar. Buda RAM gerekmediği zaman yüksek kullanılır demek.

-Djava.awt.headless=true: Bunu zaten yukarıda açıklamıştım.
-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Duser.language=EN -Duser.country=US: Bu kodların hepsi türkiye makinelerde çıkan UTF-8 (türkçe karakter) sorunlarını çözmek için eklenen kodlar.
-Dpaper.playerconnection.keepalive=120: java.io.IOException: Connection forcibly closed by remote host tarzı hataları azaltmak için timeout süresini arttıran kod. Varsayılan 30 diye biliyorum 60-120 arası kullanabilirsiniz.
-Dlog4j.skipJansi=true: Bunu ve diğer Java argümanı olmayıpta program / spigot argümanı olan bir kaç şeyi daha yukarıda açıklamıştım, bakabilirsiniz.



Başka bir anlamadığınız veya sormak istediğiniz kod var ise cevaplamaktan mutluluk duyarım.
Bir sonraki konularda görüşmek üzere..

 
Son düzenleme:

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
Loglar ne için siliniyor?
Yer kaplamaması ve kirlilik oluşturmaması için siliniyor (kendi sunucumda önemli olayların kaydedildiği farklı loglar var) fakat eğer isterseniz kaldırabilirsiniz. Normalde başka eklentilere ait bazı geçici dosyalar da siliniyor du fakat bu eklentiler herkes de olmadığı için paylaşırken koddan kaldırma gereği duydum. Konuya eğer logların silinmesini istemiyorsanız kaldırın tarzı bir şey ekledim.
 

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
Minecraft Türkiye Forumu Kadir

Kadir

Mesele ne mesela?
Site Sahibi
28 Mayıs 2018
845
1,680
1,690
EXP
8845.32
Minecoin
335.7
Java 8 kullanıyorum ve bende kullanılıyor herhangi bir hata yok. Java 9 veya 10'da kaldırıldıysa basitçe koddan -Xms kısmını kaldırabilirsiniz çünkü çoğunluk Java 8 kullanmakta. Kullanılmıyor dan kastınız gereksiz ise bana göre önemli bir etken.
Hata var yada yok demiyoruz bir işlev görmüyor, java 8'de kaldırıldı.
 
  • Beğen
Tepkiler: alfem

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
Hata var yada yok demiyoruz bir işlev görmüyor, java 8'de kaldırıldı.
Java 8 kullanıyorum ayar işe yarıyor bende. Kaldırılan ayarlarda başlangıçta warning veriyor diye biliyorum. Perm size kaldırılmıştı ama xms'i bilmiyorum. Sunucunun 1MB ile başlayıp sadece ihtiyacı olduğunda ram kullanmasını sağlıyor o ayar.
 

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
.
Yeni Parametreler!
-XX:+UnlockExperimentalVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+UseCompressedOops -XX:+UseLWPSynchronization -XX:+OptimizeStringConcat
Bash:
@echo off
title Sunucu Yonetim Kontrol Paneli
:x
echo Sunucu aciliyor...
java -d64 -server -Xms1M -Xmx9G -XX:+UnlockExperimentalVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+UseCompressedOops -XX:+UseLWPSynchronization -XX:+OptimizeStringConcat -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+UseLargePagesInMetaspace -XX:+AggressiveOpts -Dfile.encoding=UTF-8 -Duser.language=EN -Duser.country=US -Dpaper.playerconnection.keepalive=60 -jar PaperSpigot.jar -nojline -o false --log-strip-color --log-append=false nogui
echo Sunucu kapandi. Yeniden baslatilmasini istemiyor iseniz pencereyi kapatin.
echo Gunluk temizlik baslatiliyor..
echo Dosyalar siliniyor...
del logs\*.* /q
echo Dosya silme basarili, sunucu yeniden baslatiliyor..
timeout 3 > nul
goto x

Konuyu düzenleme yetkim olmadığı için, @edergo veya herhangi bir yetkiliden konuyu düzenlemesini, veya bana düzenleme yetkisi vermesini rica ediyorum.
.
 

successed

★ Onursal Üye ★
1 Ekim 2018
77
24
1,126
izmir
izmirmc.com
EXP
2475.7
Minecoin
0
Linux da bu flag dizesinde -nojline yön tuşlarının çalışmasını engelliyor. Konsoldan say 1 yazdınız diyelimki tekrar aynı şeyi yazmak istediğinizde yön tuşunu kullanarak yukarı bastığınızda yada aşaya bastığınızda çalışmadığını göreceksiniz. -nojline yi flaglardan çıkartırsanız problem kalmayacaktır. Paylaşım için teşekkürler linux içinde uyarlarsanız daha iyi olur.
 
  • Beğen
Tepkiler: LifeMCServer

LifeMCServer

Yeni Üye
Konu Sahibi
31 Mayıs 2018
186
329
0
21
EXP
0
Minecoin
0
Linux da bu flag dizesinde -nojline yön tuşlarının çalışmasını engelliyor. Konsoldan say 1 yazdınız diyelimki tekrar aynı şeyi yazmak istediğinizde yön tuşunu kullanarak yukarı bastığınızda yada aşaya bastığınızda çalışmadığını göreceksiniz. -nojline yi flaglardan çıkartırsanız problem kalmayacaktır. Paylaşım için teşekkürler linux içinde uyarlarsanız daha iyi olur.
JLine konsolu renklendirmek ve üst tuşuna basınca en son kullanılan komutu girdirmek (ayrıca komutun başında > işaretini göstermek) için Bukkit'in kullandığı bir kütüphane. Kapatmak sunucu performansını arttırdığından ve benim testlerime göre bir problem yaratmadığından dolayı koydum. Zaten bu başlatma kodlarını hiç bir zaman direk kopyalayıp alıp kullanmanızı tavsiye etmiyorum, her ayarı araştırıp ne işe yaradıklarını öğrenip öyle kullanın. Konuda "basitçe" açıklamaya çalıştım fakat araştırıp öğrenmeniz daha sağlıklı olur tabii.
 
  • Beğen
Tepkiler: successed