Aikar'ın Bayrakları 12 GB'ta Değişiyor — Beşi Artıyor, Biri Azalıyor
4 GB'lık bir bayrak setini 16 GB'lık bir sunucuya kopyalamak beş değeri yanlış bırakır. İşte tam olarak hangi beşinin yanlış olduğunu, ayrıca modlu bir sunucunun sınırı aştığı ve vanilla bir sunucunun aşmadığı oyuncu sayısını burada bulabilirsiniz.
Aikar'ın bayrakları, bir Kâğıt (Paper) sunucusu için topluluk standardı JVM argümanlarıdır ve genellikle tek bir blok halinde kopyalanırlar. Ancak tek bir blok değildirler: yirmi argümandan beşi, yığınınızın (heap) 12 GB'ın altında veya üstünde olmasına bağlı olarak değişir. Küçük yığın setini büyük yığınlı bir sunucuya yapıştırmak, "önerilen bayrakları" çalıştırmanın ve onları doğru şekilde alamamanın en yaygın yoludur.
Değişen beş bayrak
| bayrak | 12 GB altı | 12 GB ve üzeri |
|---|---|---|
-XX:G1NewSizePercent | 30 | 40 |
-XX:G1MaxNewSizePercent | 40 | 50 |
-XX:G1HeapRegionSize | 8M | 16M |
-XX:G1ReservePercent | 20 | 15 |
-XX:InitiatingHeapOccupancyPercent | 15 | 20 |
G1ReservePercent azalan bayraktır. Beş bayraktan dördü yığın boyutuyla artarken, bu bir tanesi azalır. Bu yüzden yarı hatırlanan "büyük bir sunucu için sayıları artır" ifadesi, sadece suboptimal bir set yerine yanlış bir set üretir. Bu bayrak, tahliye hatasına karşı yığının bir kısmını ayırır ve daha büyük bir yığın, aynı mutlak boşluğu tutmak için daha küçük bir kesire ihtiyaç duyar.
Geri kalan on üç -XX: argümanı her yığın boyutunda aynıdır — -XX:+UseG1GC, -XX:MaxGCPauseMillis=200, -XX:+AlwaysPreTouch, -XX:SurvivorRatio=32, -XX:MaxTenuringThreshold=1 ve diğerleri değişmez. Sadece -Xms ve -Xmx yığın boyutunun kendisini takip eder.
12 GB sınırının gerçekte nerede olduğu
Bu sayfadaki jeneratör, yığın boyutunu oyuncu sayınıza göre ayarlar:
GB = clamp( ceil( (modded ? 2.5 : 1) × (2 + players / 12) ), 2, 32 )
Modlu sunucular vanilla sunucuların 2.5 katı olarak bütçelenir ve bu faktör, büyük yığın dalını kimin görüp görmeyeceğini belirler:
| oyuncu | vanilla | modlu |
|---|---|---|
| 10 | 3 GB | 8 GB |
| 20 | 4 GB | 10 GB |
| 29 | 5 GB | 12 GB ← modlu burada sınırı aşar |
| 50 | 7 GB | 16 GB |
| 100 | 11 GB | 26 GB |
| 109 | 12 GB ← vanilla burada sınırı aşar | 28 GB |
Modlu bir sunucu, 29 oyuncuda büyük yığın bayraklarına ulaşır. Vanilla bir sunucu ise 109 oyuncuya kadar ulaşmaz. Bu nedenle, çoğu vanilla Kâğıt (Paper) çalıştıran kişi için küçük yığın seti kalıcı olarak doğru olanıdır — ve çoğu modlu sunucu çalıştıran kişi için, beklediklerinden çok daha erken yanlış olmaya başlar.
Bu formüldeki bilinmesi gereken iki sınır
Asla 32 GB'tan fazlasını önermez. Vanilla, 349 oyuncuda sınıra ulaşır ve orada kalır. Bu bir yuvarlama hatası değildir — yaklaşık 32 GB'tan sonra JVM sıkıştırılmış nesne işaretçilerini kaybeder ve yığındaki her referans büyür, bu da daha fazla RAM'in daha az kullanılabilir yığın anlamına gelebileceği anlamına gelir. Bu noktanın ötesine ölçeklendirme, daha büyük bir sunucu yerine ikinci bir sunucunun işidir.
Asla 2 GB'tan azını önermez, tek bir Oyuncu için bile, çünkü taban nüfus yerine sunucu yazılımıdır.
Ve formül ne derse desin: JVM'ye kutunun sahip olduğu her şeyi vermeyin. -Xms ve -Xmx burada bilerek aynı değere ayarlanmıştır — sabit bir yığın, JVM'nin yük altında yeniden boyutlandırmasını önler — bu da seçtiğiniz sayının hemen ve kalıcı olarak talep edildiği anlamına gelir. İşletim sistemine sizinle savaşmak zorunda kalmayacağı 1-2 GB bırakın.