DDang_ 0b63184742cd4e33977ad64856fb0d70
자료 공통 리뷰, 강좌 서버
마인크래프트 멀티플레이 서버를 최적화 하는 법 ~1.16.5 | Bukkit, Spigot, Paper
[GUIDE] Server Optimization⚡ | SpigotMC - High Performance Minecraft
이 글은 해당 해외 자료를 토대로 만들어졌으며, 의역이 존재할 수 있음을 알립니다.
1. 개요
서버의 게임 플레이 경험을 망치지 않으면서, 서버의 성능을 끌어올릴 수 있는 서버 최적화 가이드입니다.
목차를 보자면 크게,
- 1. 맵을 미리 생성시키자
- 2. 버킷.yml 수정
- 3. spigot.yml 수정
- 4. paper.yml 수정
- 5. server.properties 수정
- 6. java 플래그 설정
이 있습니다.
본 자료부터 1.16.5 기준으로 업데이트 되었으니 참고 바랍니다.
2. 맵을 미리 생성시키자
서버 파일을 건들기 전에 맵을 먼저 미리 생성시켜두는 게 좋습니다.
Chunky | SpigotMC - High Performance Minecraft
1) 위의 링크로 들어가 Chunky 를 다운받고 넣어준다 (무료입니다.)
2) 적절한 거리의 월드 보더를 잡아주고 플러그인 명령어를 통해 청크를(맵을) 미리 생성해줍니다.
3) 맵 크기에 맞춰서 시간을 기다려 줍니다.
4) 보더를 지나면 이제 새로운 청크가 절대 생성되지 않습니다.
3. Bukkit.yml 수정
1) 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
서버 성능 영향 정도: 매우 큼
너무 적게 하면 몹이 나오지 않습니다.
2) chunk-gc.period-in-ticks
기본값: 600
최적화값: 400
서버 성능 영향 정도: 보통
빈 청크를 더 빠르게 언로드합니다. 더 적은 청크를 ticking 할수록 TPS에 영향을 줄일 수 있습니다.
3) ticks-per.(type)-spawns
기본값: monster:1, water:1, water-ambient:1, ambient:1
최적화값: monster:5, water:11, water-ambient:21, ambient:31
서버 성능 영향 정도:보통
이 세팅은 서버가 몹 스폰을 틱마다 얼마나자주 스폰을 시도할지를 결정합니다. 시간을 늘리면 그만큼 게임플레이에 미치는 영향을 줄일 수 있습니다. 다만 너무 높게 잡으면 몹 스폰 작업에 상당한 tick loss 가 발생할 수 있습니다.
4) autosave
기본값: 6000
최적화값: 6000
서버 성능 영향 정도: 측정 값 없음
이 설정은 얼마나 자주 월드를 저장할지를 나타냅니다. 0(비활성화) 가 아닌지만 확인하세요
참고: 월드 자동 저장 플러그인을 쓰고 있다면 쓰지 마세요 그거 /save-all 일정 시간마다 쳐주는 거임
참고2: 월드 저장에서 lag spike 가 발생한다구요? Paper의 lag 없는 저장을 생각해보세요
4. Spigot.yml 수정
1) save-user-cache-on-stop-only
기본값: false
최적화값: true
서버 성능 영향 정도: 보통
false 면 지속적으로 유저 데이터 저장, true면 서버 끄거나 재시작할때 저장인데, spigot 버킷이면 TPS 손실을 막을 수 있음. Paper 면 좀 더 효율적이기에 덜 하긴 합니다.
2) max-tick-time
기본값: tile:50, entity: 50
최적화값: tile: 1000, entity: 1000
영향 정도: 측정 안됨
1000 이면 이 기능을 비활성화 시키는 것.
3) mob-spawn-range
기본값: 8
최적화값: 6
영향 정도: 측정 안됨
이 세팅은 플레이어로부터 (한 청크 안에서) 최대 몹 생성 거리를 설정하는 것.
주의: server.propertise 에서 view-distance가 6이거나 더 작으면, 그 값보다 1 작게 설정해야함 (예: view distance가 5 -> mob-spawn-range 가 4)
4) entity-activation-range
기본값: animals:32, monsters:32, raiders: 48, misc:16
최적화값: animals:16, monsters:24, raiders: 48, misc:8
영향 정도: 보통
이 거리 밖의 엔티티는 더 느리게 tick 합니다. 너무 낮게 잡으면 몹과 동물들의 행동이 망가집니다.
5) tick-inactive-villagers
기본값: true
최적화값: false
영향 정도: 보통
감지 거리 밖에 있는 주민을 굳이 tick할 필요가 없습니다.
6) merge-radius
기본값: item:2.5, exp:3.0
최적화값: item:4.0, exp:6.0
영향 정도: 보통
바닥에 떨어진 아이템을 합치는 거리인데, 바닥에 떨어진 아이템들을 tick 하는걸 줄여줌
7) nerf-spawner-mobs
기본값: false
최적화값: true
영향 정도: 보통
켜두면 몹 스포너에서 생성되는 몹이 AI 가 비활성화됨 (수영하지 않고, 움직이지 않고, 공격하지 않음) 이건 대형 몹 농장에서 나오는 TPS 절감 효과를 받을 수 있음, 다만 몹 팜 제한 플러그인이 더 나을 수 있음
8) item-despawn-rate
기본값: 6000(5분)
최적화값: 더 낮은 값
영향 정도: 상황에 맞춰서 조정
땅에 떨어진 아이템을 지워버리는 시간(틱). 지워지면 TPS 절감 효과가 상당할 수 있음, 근데 땅에 떨어진 템이 바로 사라지니 게임 플레이에 영향 갈 수 있으니 알아서 조정
9) arrow-despawn-rate
기본값: 1200
최적화값: 300
영향 정도: 작음
굳이 화살을 오래 남길 필요가 없음
5. PAPER.yml 수정
아직도 렉이 걸리면 paper.yml 도 수정해야함
1) max-auto-save-chunks-per-tick
기본값: 24
최적화값: 6
영향 정도: 큼
이 기능은 월드 저장 작업에서 청크 저장을 느리게 해줌, 요새 만드는 서버에 중요한 기능 (너무 낮게 잡으면 청크가 저장되지 않음 그니까 너무 낮은건 피하삼)
2) optimize-explosions
기본값: false
최적화값: true
영향: 작음
페이퍼 버킷은 게임 플레이에 영향을 주지 않는 더 효율적인 폭발 알고리즘을 쓰고 있음
3) mob-spawner-tick-rate
기본값: 1
최적화값: 2
영향: 작음
활동중인 스포너가 몹을 스폰하는데 드는 지연 시간(틱) 인데, 스포너로 인한 tick loss가 발생할 때 높게 잡으면 됨
4) disable-chest-cat-detection
기본값: false
최적화값: true
영향: 작음
고양이가 상자 위에 앉는거 감지 그닥 필요 없음
5) container-update-tick-rate
기본값: 1
최적화값: 3
영향: 작음
인벤토리가 열렸을 때 얼마나 자주(틱) 새로고침 해주는가를 나타냄. 너무 커지면 시각적 오류가 생길 수 있음
6) max-entity-collisions:
기본값: 8
최적화값: 2
영향: 보통
충돌이 적어짐 -> TPS 절감 ㅋㅋ
7) grass-spread-tick-rate
기본값: 1
최적화값: 4
영향: 보통
청크 안에서 풀의 확산 속도, 대부분의 게임 종류에 영향을 크게 미치진 않음
8) despawn-ranges
기본값: soft: 32, hard: 128
최적화값: soft: 28, hard: 96
영향: 작음
soft = 플레이어로부터 주기적으로 몹을 지워주는 거리
hard = 즉시 몹을 지워주는 거리
9) hopper.disable-move-event
기본값: false
최적화값: true
영향: 큼
상당한 깔대기 lag을 줄여줌 (모든 보관함의 슬롯마다 InventoryMoveItemEvent가 일어나는 걸 막음)
주의: 플러그인 InventoryMoveItemEvent 가 고장남
10) non-player-arrow-despawn-rate
기본값: -1
최적화값: 60 (3초)
영향: 작음
화살이 오래 꽂혀있을 필요가 없음
11) creative-arrow-despawn-rate
기본값: -1
최적화값: 60 (3초)
영향: 작음
얘도 마찬가지
12) prevent-moving-into-unloaded-chunks
기본값: false
최적화값: true
영향: 보통
lag 때문에 청크가 로드되지 않은 곳을 이동하는 걸 막음
13) use-faster-eigencraft-redstone
기본값: false
최적화값: true
영향: 큼
레드스톤 최적화인데 바닐라 게임 플레이를 손상시키지 않고 중복된 레드스톤을 95% 까지 지워줌. 최대 10배의 속도를 보여줌.
14) armor-stand-tick
기본값: true
최적화값: false
영향: 작음
아머스탠드 ticking 하는거 막음 굳이 아머스탠드 가지고 놀거 아니면 상관없으니 ㄱㄱ
15) per-player-mob-spawns
기본값: false
최적화값: true
영향: 작음
버킷의 무작위 몹 생성 알고리즘 대신에 향상된 개개인 몹 스폰 방식을 사용함. 이건 대형 몹 팜같은거 막을 때 좋음
16) alt-item-despawn-rate
기본값: false
최적화값: true
영향: 보통
자기가 원하는 아이템만 골라서 없앨 시간 잡을 수 있음
이렇게 잡으면 15초면 저 아이템들이 사라짐
17) no-tick-view-distance
기본값: -1
최적화값: view-distance 설정값
영향: 측정 안됨
view-distance 바깥을 tick 하지 않도록 함
18) anti-xray.enabled
기본값: false
최적화값: true
영향: 측정 안됨
엑스레이 방지, TPS 가 소요되지만, 페이퍼의 엑스레이 방지는 좀더 효율적이니 ㄱㅊ 1정도로 설정하면 됨
5. SERVER.PROPERTIES 수정
1) view-distance
기본값:10
최적화값: 4~8
영향: 큼
아주 중요한 부분인데 이제까지 한 것 중에서 가장 중요함
야생 서버면 6 이상 잡으면 되고 아니면 더 낮게 해주면 청크 생성으로 인한 렉을 잡을 수 있음
다만 보이는 거리 자체가 짧아지므로 주의
2) network-compression-threshold
기본값: 256
최적화값: 번지코드-1, 기본 512
영향: 작음
높게 설정할 수록 대역폭 비용에서 리소스 절약 가능 -1 로 쓰면 비활성화
만약 서버가 2 ms 핑 미만이라면 비활성화 시키는게 이득임
6. 자바 플래그 설정
java -Xms1G -Xmx1G -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 ns.jar nogui
이걸 서버 실행기에 붙이면 되고 수정해야할 부분은 맨 앞 -Xms -Xmx 부분 설정이랑 맨뒤 -jar 서버이름.jar 부분만 설정하면 됩니다.
제 프로필로 들어가시면 더 많은 서버 개발 꿀팁과 운영 방법, 가이드를 확인할 수 있습니다! 또한 개발하다가 막히는 부분이 있다면 DDang_#6786으로 연락 주시면 간단한 문제에 대한 알고 있는 해답을 드리도록 하겠습니다
마커임
2021.07.12오.. 감사합니다.
DDang_
2021.07.12아주 좋습니다
자함
2021.11.09감사합니다~ 유용하게 쓰도록 할게요 ^오^
하얀눈
2024.01.26픽셀몬 서버하면서 서버렉이 점점심해져서 고생중이였는데.. 이런글을 보면 너무 감사해요! :D
이세상누군가3445
2024.03.01이 글에서 spigot.yml에 tick-inactive-villager: false로 설정하라 하셨는데, 혹시 여기에 플러그인으로 삽입된 주민형 NPC(예시: 하이픽셀 배드워즈에 상점 주민 등)도 포함되는 건가요?
Louly
2024.07.01use-faster-eigencraft-redstone 이게 설정에서 없는데 사라졌거나 이름이 바뀐건가요
태권브이3
2024.08.08버킷 yml 파일 어디에 있어요?? 지금 며칠째 찾는중..ㅠ