Прапорці Aikar змінюються на 12 GB — п'ять із них, і один зменшується
Копіювання набору прапорців для 4 GB на сервер із 16 GB залишає п'ять хибних значень. Ось саме які п'ять, а також кількість гравців, за якої сервер із модами перетинає цю межу, а ванільний — ні.
Прапорці Aikar — це стандартні для спільноти аргументи JVM для сервера Paper, і зазвичай їх копіюють одним блоком. Але це не один блок: із двадцяти аргументів, п'ять змінюються залежно від того, чи обсяг вашої купи менший або більший за 12 GB. Вставлення набору для малої купи на сервер із великою купою — це найпоширеніший спосіб запустити «рекомендовані прапорці» і не отримати їх.
П'ять тих, що змінюються
| прапорець | менше 12 GB | 12 GB і більше |
|---|---|---|
-XX:G1NewSizePercent | 30 | 40 |
-XX:G1MaxNewSizePercent | 40 | 50 |
-XX:G1HeapRegionSize | 8M | 16M |
-XX:G1ReservePercent | 20 | 15 |
-XX:InitiatingHeapOccupancyPercent | 15 | 20 |
G1ReservePercent is the one that goes down. Чотири з п'яти зростають зі збільшенням розміру купи, а той один зменшується, через що напівзгадане «підняти числа для великого сервера» створює хибний набір, а не просто неоптимальний. Він резервує частку купи проти збою евакуації, а більша купа потребує меншої частки для збереження того самого абсолютного запасу.
Решта тринадцять -XX: arguments are identical at every heap size — -XX:+UseG1GC, -XX:MaxGCPauseMillis=200, -XX:+AlwaysPreTouch, -XX:SurvivorRatio=32, -XX:MaxTenuringThreshold=1 and the rest do not move. Only -Xms and -Xmx track the heap size itself.
Де насправді проходить межа 12 GB
Генератор на цій сторінці визначає розмір купи за кількістю гравців:
GB = clamp( ceil( (modded ? 2.5 : 1) × (2 + players / 12) ), 2, 32 )
Сервери з модами розраховуються як 2.5× від ванільних, і саме цей фактор визначає, хто взагалі побачить гілку великої купи:
| гравців | ванільний | з модами |
|---|---|---|
| 10 | 3 GB | 8 GB |
| 20 | 4 GB | 10 GB |
| 29 | 5 GB | 12 GB ← з модами перетинає тут |
| 50 | 7 GB | 16 GB |
| 100 | 11 GB | 26 GB |
| 109 | 12 GB ← ванільний перетинає тут | 28 GB |
Сервер із модами досягає прапорців великої купи за 29 гравців. Ванільний не досягає до 109. Тож для більшості людей, які запускають ванільний Paper, набір для малої купи залишається правильним назавжди — а для більшості, хто запускає сервер із модами, він перестає бути правильним набагато раніше, ніж вони очікують.
Два обмеження в цій формулі, про які варто знати
Вона ніколи не рекомендує більше ніж 32 GB. Ваніль досягає ліміту при 349 гравцях і залишається там. Це не артефакт округлення — понад приблизно 32 GB JVM втрачає стислі вказівники на об'єкти, і кожне посилання в купі стає більшим, тому більше оперативної пам'яті може означати менше корисної купи. Масштабування понад цю точку — завдання для другого сервера, а не для більшого.
Вона ніколи не рекомендує менше ніж 2 GB, навіть для одного гравця, оскільки нижня межа обумовлена серверним програмним забезпеченням, а не кількістю гравців.
І що б не казала формула: не віддавайте JVM усе, що є на машині. -Xms and -Xmx are set to the same value here on purpose — a fixed heap avoids the JVM resizing under load — which means the number you pick is claimed immediately and permanently. Leave the operating system 1–2 GB it does not have to fight you for.