프로그래밍/마인크래프트 서버, 플러그인

마인크래프트 서버 최적화 방법 (Can't keep up! Is the server overloaded)

Lou Park 2021. 12. 26. 13:49

마인크래프트 서버를 운영할때, 분명 하드웨어 스펙이 충분한데도 사람이 들어오면 버벅거리거나 "Can't keep up! Is the server overloaded?" 메세지를 뱉어내며 서버가 고통스러워 하는 순간이 있다. 

 

Java에서 Garbage Collector가 동작하는 순간에는 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드가 모두 작업을 멈추는 Stop the world 현상이 일어난다. 이는 게임 플레이 중에는 버벅임으로 이어진다.

 

그렇기 때문에 불필요한 GC가 일어나지 않도록 하거나 GC가 효율적으로 수행될 수 있도록 튜닝이 필요하다. 한 마인크래프트 서버 관리자 Aikar는 자신이 수년간 서버를 운영하며 최적화된 Java Flag 설정을 공유했는데, 이를 Aikar Flags라고 한다. Aikar Flags의 내용은 아래와 같은데, 여기에 자신의 서버에 맞는 최소 메모리, 최대 메모리, 버킷명을 따로 커스텀해서 실행시켜주면 이전보다 훨씬 부드러운 플레이가 가능할 것이다. 

 

java -Xms<최소메모리>G -Xmx<최대메모리>G -XX:+IgnoreUnrecognizedVMOptions -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar <서버버킷>.jar nogui

 

나도 실제로 서버에 적용시켜보니 이전보다 평균 프레임이 10~20정도 높아졌다. 추가로 -XX:+IgnoreUnrecognizedVMOptions라는 옵션을 더 붙여주었는데, 일부 Flag는 특정 자바 버전만 지원하기 때문에 지원가능한 자바 버전이 달라서 생기는 오류를 무시하도록 해준다.

 

*docker용 Flag

 -XX:+IgnoreUnrecognizedVMOptions -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true

 

 

출처

https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/ 

https://blog.airplane.gg/aikar-flags/