개인 자료란 (JE)

  서버 커뮤니티

Profile DDang_ 대표칭호 없음

DDang_ 0b63184742cd4e33977ad64856fb0d70

Profile

자료 공통 리뷰, 강좌 서버

마인크래프트 멀티플레이 서버를 최적화 하는 법 ~1.16.5 | Bukkit, Spigot, Paper

2021.07.12 조회 수 25402 추천 수 2

[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
영향: 보통

자기가 원하는 아이템만 골라서 없앨 시간 잡을 수 있음

a242c866e454093dd29689bb2634938c.png

이렇게 잡으면 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

cb84c2d1a151bd1c8cf67ef0ff60e127.png




기본값: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으로 연락 주시면 간단한 문제에 대한 알고 있는 해답을 드리도록 하겠습니다 




5개의 댓글

마커임
2021.07.12

오.. 감사합니다.

DDang_
2021.07.12
@마커임

아주 좋습니다

자함
2021.11.09

감사합니다~ 유용하게 쓰도록 할게요 ^오^

하얀눈
2024.01.26

픽셀몬 서버하면서 서버렉이 점점심해져서 고생중이였는데.. 이런글을 보면 너무 감사해요! :D

이 글에서 spigot.yml에 tick-inactive-villager: false로 설정하라 하셨는데, 혹시 여기에 플러그인으로 삽입된 주민형 NPC(예시: 하이픽셀 배드워즈에 상점 주민 등)도 포함되는 건가요?

뉴스 및 창작물
/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4