Skip to content

Instantly share code, notes, and snippets.

@aroxu
Last active April 17, 2024 04:56
Show Gist options
  • Save aroxu/44bd2a271668ed6b70b6bc6278c8a8e4 to your computer and use it in GitHub Desktop.
Save aroxu/44bd2a271668ed6b70b6bc6278c8a8e4 to your computer and use it in GitHub Desktop.
Minecraft Server Optimization Guide (Korean)

시작 하기 앞서, 이 가이드는 이 Spigot MC 최적화 가이드를 보기 쉽게 한글화 한것임을 알립니다.

bukkit.yml

  • spawn-limits
    기본값: monsters:70, animals:10, water-animals:15, water-ambient:20, ambient:15
    최적화 값: monsters:50, animals:8, water-animals:7, water-ambient:10, ambient:1
    성능에 미치는 영향: 높음

    ➫ "플레이어 당 몹"(플레이어 한명당 비례하게 생기는 몹의 양) 값이 낮을수록 몹이 적다는 것을 의미합니다. 너무 낮게 설정하는 것을 피하세요. 그렇지 않으면 눈에 띄게 몹이 부족할 수 있습니다.

  • chunk-gc.period-in-ticks
    기본값: 600
    최적화 값: 400
    성능에 미치는 영향: 중간

    ➫ 이 값은 빈 청크의 언로드 속도를 조절합니다. 더 적게 조절할수록 TPS 소비량이 줄어듭니다.

  • ticks-per.(type)-spawns
    기본값: monster:1, water:1, water-ambient:1, ambient:1
    최적화 값: monster:5, water:11, water-ambient:21, ambient:31
    성능에 미치는 영향: 중간

    ➫ 서버가 엔티티 생성을 시도하는 빈도 (틱 단위)를 설정합니다. 몹 스폰 사이의 시간을 늘려도 게임 플레이에 영향을주지 않습니다. 틱 속도를 줄이면 더 많이 퍼집니다.

    참고: mobSpawn 작업에 상당한 틱 손실이있는 경우에만 더 높이세요.

  • autosave
    기본값: 6000 (대체적으로)
    최적화 값: 6000
    성능에 미치는 영향: 명확하지 않음

    ➫ 이 값은 Bukkit의 세계 저장 기능 활성화와 저장 빈도(틱 단위)를 설정합니다. 기본적으로 6000이어야하며 0(비활성화)이 아닌지 다시 확인하십시오.

    참고: 서버 또는 플러그인을 사용하여 저장을 실행하는 경우 당장 중단하세요! 매우 오래된 /save-all 명령을 실행합니다.

    • 세계 저장 랙: 월드를 저장할 때 저장 지연으로 인한 스파이크가 생기나요? PaperMC의 랙 없는 저장을 고려해보세요.

spigot.yml

  • save-user-cache-on-stop-only
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 중간

    ➫ 서버가 지속적으로 사용자 데이터를 저장(false)하거나 서버 재시작 / 정지 할때 작업을 실행(true)해야 하나요? 이 옵션은 Spigot에서 TPS 소비량을 효과적으로 줄일 수 있습니다. (Paper 버킷이 더 효율적이기 때문에 이 옵션이 성능에 미치는 영향은 적음).

    참고: 간헐적으로 서버가 충돌하거나 응답하지 않을 때 데이터 손실을 방지하려면, 주기적으로 백업하세요.

  • max-tick-time
    기본값: tile:50, entity:50
    최적화 값: tile:1000, entity:1000
    성능에 미치는 영향: 명확하지 않음

    1000을 입력하면 이 기능을 비활성화 시킵니다. 이 적은 TPS 소비량 절감은 영향을 주지 않습니다. 자세히 보기

  • mob-spawn-range
    기본값: 8
    최적화 값: 6
    성능에 미치는 영향: 알 수 없음

    ➫ 이것은 플레이어로부터의 최대 몹 스폰 거리 (청크 단위)를 설정합니다. Bukkit에서 스폰을 제한한 후 몹 데이터를 압축하여 평소처럼 작동하게 합니다.

    경고: 만약 시야 범위가 6 이하라면, 이 수치를 시야거리에서 -1 만큼 조절하여 설정하세요. (예: 시야 범위가 5라면, mob-spawn-range를 4로 설정)

  • entity-activation-range
    기본값: animals:32, monsters:32, raiders: 48, misc:16
    최적화 값: animals:16, monsters:24, raiders: 48, misc:8
    성능에 미치는 영향: 중간

    ➫ 이 범위를 초과하는 엔티티는 비교적 적게 활성화 됩니다. 이 값을 너무 낮게 설정하면 몹 행동 (몹 어그로, 습격 등)이 제대로 작동하지 않을 수 있습니다.

    참고: 마을 사람들은 (가능하다면) 혼자 남겨져 정비사(대장장이)를 보호해야합니다.

  • tick-inactive-villagers
    기본값: true
    최적화 값: false
    성능에 미치는 영향: 중간

    ➫ 이 기능을 활성화하면 서버가 활성화 범위 밖에있는 주민이 활동하는 것을 방지 할 수 있습니다.

    참고: 바닐라 Minecraft 에서는 로드 된 모든 청크의 모든 주민을 활동하도록 합니다. 공황 상태에 빠진 주민을 활성화하여 일부 철 농장이 원활하게 작동하지 않는 것을 방지하십시오.

  • merge-radius
    기본값: item:2.5, exp:3.0
    최적화 값: item:4.0, exp:6.0
    성능에 미치는 영향: 중간

    ➫ 아이템을 병합한다는 것은 지상 항목의 틱이 적다는 것을 의미합니다. 이 값이 높을수록 더 많은 아이템을 더미로 쓸 수 있습니다.

    참고: 병합하면 아이템이 병합 될 때 사라지는듯한 착각을 불러 일으킬 것입니다. 약간 성가심

  • nerf-spawner-mobs
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 중간

    ➫ 활성화되면 스포 너의 몹은 AI를 갖지 않습니다 (수영 / 공격 / 이동 등의 행동이 중단됨). 이것은 대규모 몹 농장에 대한 큰 TPS 소비량 절감을 할 수 있지만 몹의 행동을 엉망으로 만듭니다. 팜 리미터 플러그인이 더 나은 해결책 일 수 있습니다.

    참고: Paper 버킷에는 너프된 몹이 점프 / 수영하도록 강제하는 옵션이 있습니다.

  • item-despawn-rate
    기본값: 6000 (5분)
    최적화 값: 더 적게?
    성능에 미치는 영향: 상황에 따라 다름

    ➫ 땅 위의 아이템이 제거되기까지의 시간(틱 단위) 입니다. TPS 소비량을 감소하여 성능을 개선할 수 있지만, 아이템을 떨어트린 장소로 돌아가는 것이 중요한 서버(예: keepInventory 게임 룰이 꺼진 야생 서버)의 게임 플레이에도 영향을 미칩니다.

    참고: Paper의 alt-item-despawn-rate를 참조하여 귀한 아이템을 지우지 않고도 불필요한 아이템(예를 들면 조약돌)을 타겟팅 할 수 있습니다.

  • arrow-despawn-rate
    기본값: 1200
    최적화 값: 300
    성능에 미치는 영향: 낮음

    ➫ item-despawn-rate와 비슷하지만 이 옵션은 화살에만 적용됩니다. 일부 서버에서는 땅 위에 화살을 더 오래두기를 원할 수 있지만 대부분은 더 빨리 제거해도 큰 영향이 없습니다.

    참고: Paper 버킷에는 화살 제거로 인한 게임 플레이 영향을 최소화 하기 위한 설정이 있습니다. Paper 버킷의 화살 옵션을 사용하는 경우 기본값에 가깝게 설정하세요.

paper.yml

  • max-auto-save-chunks-per-tick
    기본값: 24
    최적화 값: 6
    성능에 미치는 영향: 높음

    ➫ 이렇게 하면 월드 세이브 작업 중에 잠재적 청크 저장 속도가 느려집니다. 이것은 현대 서버에서 매우 중요합니다 (세계 저장은 구립니다).

    참고: 이 값을 너무 낮게 설정하면 저장되지 않은 청크가 발생할 수 있으므로 6 미만으로 낮추지 마십시오.

  • optimize-explosions
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 낮음

    ➫ Paper 버킷에는 게임 플레이에 영향을 주지 않는 폭발에 대한 매우 효율적인 알고리즘을 가지고 있습니다.

  • mob-spawner-tick-rate
    기본값: 1
    최적화 값: 2
    성능에 미치는 영향: 낮음

    ➫ 이 옵션은 활성화 된 몹 스포너가 몹을 스폰을 시도하기 전의 지연 시간(틱 단위) 입니다. 지연 시간을 두 배로 늘려도 몹 스폰 속도에는 영향을 주지 않습니다. 활성화 된 몹 스포너에 대한 상당한 틱 손실이있는 경우에만 이 값을 더 높이십시오.

  • disable-chest-cat-detection
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 낮음

    ➫ 플레이어가 상자를 열때 상자 위에 고양이가 있는지 확인합니다. 이 옵션을 활성화하면 바닐라 동작(고양이가 상자를 막음)을 제거 할 수 있지만, 이 메커니즘이 정말로 필요한지 한번 더 생각해보세요.

  • container-update-tick-rate
    기본값: 1
    최적화 값: 3
    성능에 미치는 영향: 낮음

    ➫ 이는 플레이어의 인벤토리가 열려있는 동안 새로 고쳐지는 빈도(틱 단위)를 변경합니다. 시각적 문제를 방지하려면 4를 초과하지 마십시오.

  • max-entity-collisions (in Spigot.yml in some builds)
    기본값: 8
    최적화 값: 2
    성능에 미치는 영향: 중간

    ➫ 밀집된 개체 (그라인더, 농장 등)의 밀집률을 낮추고 TPS를 덜 소비하게 합니다.

  • grass-spread-tick-rate
    기본값: 1
    최적화 값: 4
    성능에 미치는 영향: 중간

    ➫ 서버가 잔디를 다른 흙으로 퍼뜨리는 빈도(틱 단위) 입니다. 이것은 대부분의 게임 유형에 게임 플레이에 영향을 미치지 않습니다.

  • despawn-ranges
    기본값: soft: 32, hard: 128
    최적화 값: soft: 28, hard: 96
    성능에 미치는 영향: 낮음

    Soft = 몹이 주기적으로 제거되는 플레이어로부터의 거리(블록 단위). Hard = 몹이 즉시 제거되는 거리.

    ➫ 낮은 수치의 범위는 백그라운드 몹을 제거하고 플레이어가 많은 지역에서 더 많은 몹을 스폰 할 수 있도록합니다. 이는 스폰 감소 옵션(bukkit.yml 참고)으로 인하여 게임 플레이 만족도에 영향을 미칩니다.

  • hopper.disable-move-event
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 높음

    ➫ 이렇게 하면 모든 컨테이너의 모든 슬롯에 대해 InventoryMoveItemEvent가 호출되는 것을 방지하여 깔대기 랙을 크게 줄일 수 있습니다.

    경고: InventoryMoveItemEvent를 사용하는 플러그인이 작동하지 않습니다.

  • non-player-arrow-despawn-rate
    기본값: -1 (spigot.yml 파일의 arrow-despawn-rate 옵션 값과 동일)
    최적화 값: 60 (3초)
    성능에 미치는 영향: 낮음

    ➫ Spigot의 arrow-despawn-rate 옵션과 비슷하지만 스켈레톤이 발사한 화살을 대상으로 합니다. 플레이어는 몹 화살을 회수 할 수 없기 때문에 이것은 외관상의 변화만 있습니다.

  • creative-arrow-despawn-rate
    기본값: -1 (spigot.yml 파일의 arrow-despawn-rate 옵션 값과 동일)
    최적화 값: 60 (3초)
    성능에 미치는 영향: 낮음

    ➫ 위의 설정과 비슷하지만, 플레이어가 발사 한 회수 할 수 없는 화살(무한 활에서 발사 된 화살)에 적용됩니다.

  • prevent-moving-into-unloaded-chunks
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 중간

    ➫ 플레이어가 지연으로 인해 로드되지 않은 청크에 들어가는 것을 방지하여 더 많은 지연을 유발합니다. true로 설정하면 안전한 위치로 다시 돌아가게 합니다.

    참고: If you did not pre-generate your world (what's wrong with you?!) this setting is critical.

  • use-faster-eigencraft-redstone
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 높음

    ➫ 이 설정은 바닐라 레드스톤 장치를 손상시키지 않고 중복 레드스톤 업데이트를 95 %까지 줄여줍니다. 실제 테스트는 최대 10배의 성능 개선을 보여줍니다!

    참고: 플러그인을 사용하여 레드스톤 알고리즘을 변경하는 경우 플러그인이 레드스톤 동작을 중단하는 경향이 있으므로 (플러그인을) 이 옵션으로 대체하는 것이 좋습니다.

  • armor-stands-tick
    기본값: true
    최적화 값: false
    성능에 미치는 영향: 낮음

    ➫ 일부 아이템은 세계와 상호 작용하기 때문에 엔티티로 간주됩니다.(틱 필요) 고정되지 않은 갑옷 스탠드는 물에 밀리지 않습니다.(신경 쓰나요?)

    참고: Paper 버킷 또한 한 번에 모든 프레임을 틱하는 대신 아이템 프레임 틱으로 대체합니다. 이것은 변경할 수 없습니다.

  • per-player-mob-spawns
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 낮음

    ➫ 이것은 Bukkit의 무작위 알고리즘 대신 싱글 플레이어 생성 동작을 구현합니다. 이렇게하면 다른 사람 (예 : 대규모 농장)의 작업이 서버의 몹 스폰 속도에 영향을 주지 않습니다.

    참고: Bukkit에서 스폰 제한을 낮추고 동물과 몬스터가 부족한 것을 발견했다면 최적의 장소를 찾을 때까지 그들을 백업하는 것을 고려하십시오.

  • alt-item-despawn-rate
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 중간

    ➫ Spigot에 설정된 아이템 디스폰 속도보다 빠르게 (또는 느리게) 땅에 떨어진 특정 아이템을 제거합니다. 이렇게 하면 대량의 쓰레기 더미가 서버 틱을 낭비하는 것을 줄일 수 있습니다.

    다음은 15초마다 조약돌과 네더랙이 디스폰 되는 예 입니다:

    enabled: true
    items:
        COBBLESTONE: 300
        NETHERRACK: 300

    참고: 아이템을 추가 할 때 Spigot 아이템 목록을 참조하십시오.

  • no-tick-view-distance
    기본값: -1
    최적화 값: view-distance(시야 범위) 옵션 값과 동일
    성능에 미치는 영향: 명확하지 않음

    ➫ 이것은 청크가 로드되는 거리지만, 시야 범위 밖에서는 표시되지 않습니다.

    참고: 시야 범위를 너무 낮게 설정했다면(예 : 3 또는 4) 게임 플레이 경험을 향상시키기 위해 5 또는 6으로 설정할 수 있습니다.

  • anti-xray.enabled
    기본값: false
    최적화 값: true
    성능에 미치는 영향: 명확하지 않음

    ➫ 이 설정은 실제로 TPS에 영향을 미치지만, Paper의 안티 엑스레이는 현존하는 안티 엑스레이 알고리즘 중 가장 효율적입니다! 엔진 1은 덜 무거울 수 있지만(주로 클라이언트 용) 모드 2가 훨씬 더 효과적입니다.

server.properties

  • view-distance
    기본값: 10
    최적화 값: 4 ~ 8
    성능에 미치는 영향: 높음

    ➫ 이것은 청크 렌더 거리를 제한하므로 모든 설정에서 가장 영향력있는 설정입니다. 오픈 월드 서버 (예: 야생서버)는 더 좋은 플레이 경험을 위해 6 이상을 사용하도록 권장하지만, 공유 호스트, 낮은 사양 또는 대량의 플레이어가 있는 서버는 청크 생성이 지연을 유발하는 경우 4 ~ 5를 고려할 수 있습니다.

    경고: 시야 범위를 7보다 낮게 설정 한 경우 spigot.yml 섹션의 mob-spawn-range의 참고 사항을 참조하십시오.

  • network-compression-threshold
    기본값: 256
    최적화 값: 단일 실행의 경우(512) 번지코드의 경우(-1)
    성능에 미치는 영향: 낮음

    ➫ 이 옵션은 서버가 압축을 시도하기 전에 패킷 크기를 제한합니다. 더 높게 설정하면 대역폭 비용으로 일부 리소스를 절약 할 수 있으며, -1로 설정하면 비활성화됩니다.

    참고: 서버가 localhost의 프록시 또는 근처의 데이터 센터(지연시간이 2ms 미만의 서버)가 있는 네트워크에 있는 경우, 이 기능을 비활성화(-1로 값 변경) 하면 도움이 됩니다.

JVM Flag

이 플래그를 정확히 사용하고 Xmx 및 Xms 옵션만 변경하십시오. 이 플래그는 최소 500MB까지 모든 메모리 크기에 따라 작동하고 확장되지만 1.15 이상의 버전에서는 그렇게 적은 메모리에서는 잘 작동하지 않습니다.

java -Xms10G -Xmx10G -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paperclip.jar nogui

중요 : 모든 메모리를 사용하지 마세요!!
Xms 및 Xmx 값을 설정할 때 호스트 OS가 8000M 메모리가 있다면 8000M을 사용하지 마세요. Minecraft(및 JVM 응용 프로그램) 에는 해당 Xmx 매개 변수(Flag)에 할당된 메모리 용량 외의 추가 메모리가 필요합니다.
메모리 부족이나 "OOMKiller"가 서버에 영향을주지 않도록 Xmx 및 Xms를 약 1000-1500M 만큼 줄이는 것이 좋습니다. 또한, OS에게 여유 메모리를 남겨두어 OS가 안정적으로 구동되게 합니다.
8000M의 메모리가 있다면 안전하게 6500M을 사용하십시오. 그러나 호스트에게 이 오버 헤드를 대신하여 대신 9500M을 줄 것인지 물어볼 수도 있습니다. 일부 호스트 OS는 할 것입니다.

추천 메모리 사용량

플레이어 수에 상관없이 최소 6-10GB를 사용하는 것이 좋습니다! 10GB의 메모리를 감당할 수 없는 경우 가능한 한 많이 제공하되 OS가 사용햘 여유 메모리를 남겨 두십시오. G1GC는 충분한 여유 메모리가 있을 때 더 잘 작동합니다.

Minecraft용 메모리가 12GB 이하인 경우 이러한 매개 변수(Flag)를 조정하지 마십시오.

Xmx 값을 12G 이상 할당할때

12GB 이상의 여유 메모리가 있고 할당할 때, 다음 옵션을 참고하세요:

  • -XX:G1NewSizePercent=40
  • -XX:G1MaxNewSizePercent=50
  • -XX:G1HeapRegionSize=16M
  • -XX:G1ReservePercent=15
  • -XX:InitiatingHeapOccupancyPercent=20

경고: 이후 이전 세대 컬렉션이 증가하면 즉시 기본 플래그로 되돌리세요!

변경사항 설명:

  • 메모리 공간 문제 위험을 줄이기 위해 기본 G1NewSizePercent는 30, G1MaxNewSizePercent는 40으로 설정되어있었지만, 더 많은 메모리를 설정한다면 더 적은 이슈가 발생할 것이기에 우리는 각각 40, 50이라는 새로운 값을 설정하였습니다. 따라서 더 적은 메모리 오류가 발생할 것입니다.
  • Region크기 설정을 제대로 한다면 과할당 문제를 줄일 수 있으며, 속도 향상을 기대할 수 있습니다. 때문에 G1HeapRegionSize를 작게 잡아주었습니다.
  • 메모리 힙 초기값을 20%로 잡아 줌으로 써 더 많은 구세대 메모리에서 사용 가능하도록 하였습니다.

Java GC 로깅

GC 로깅을 사용하던중, 구세대 매개 변수(Flag)에 대한 문제가 있다면 Java 버전에 따라 다음 플래그를 추가하십시오.

  • Java 8 ~ 10 :

    -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M
  • Java 11 이상 :

    -Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M

Timings에서 이전 세대 버전의 컬렉션을 보려면 logs / gc.log 파일(최신 .log와 동일한 위치)을 가져와 Paper Discord에서 저(Celebrimbor)에게 보내 분석 도움을 받을 수 있습니다.

GC 로깅은 성능을 저하시키지 않으며 항상 유지 될 수 있습니다. 로그 파일은 약 5MB 정도이며, 많은 공간을 차지하지 않습니다.

@monun
Copy link

monun commented Mar 4, 2021

Copy link

ghost commented Apr 18, 2021

정성이야 아주 좋아

@deveworld
Copy link

감사합니다!

@w0819
Copy link

w0819 commented Nov 9, 2021

ㄷㄷ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment