시간 단위 게임 서버. 플레이할 때만 결제하세요.

맵 변경 시 CS2 서버 크래시 (GOTV 켜짐): 한 줄 해결법

CS2 서버가 잘 돌다가 맵이 바뀌는 순간 모두 튕깁니다. 서버가 크래시한 것입니다. GOTV가 켜져 있고 플레이어가 접속해 있었다면 이 버그입니다. 먼저 해결법, 그다음 원인을 설명합니다.

해결법: 한 줄

다음 파일에 이것을 추가하세요 game/csgo/cfg/server.cfg:

bot_join_delay 15
  • 이제 봇은 맵이 바뀔 때마다 15초를 기다린 뒤 들어옵니다.
  • 크래시는 플레이어가 아직 새 맵을 불러오는 중에 봇이 들어올 때 일어납니다. 지연을 두면 플레이어가 먼저 로딩을 마칩니다.
  • GOTV는 계속 켜져 있습니다. 데모 녹화도, 관전도 그대로 됩니다.
  • 재시작 없이 적용하려면 RCON으로 보내세요: rcon bot_join_delay 15

저희 랩에서는 이 설정 없이 맵 변경 6번 중 3번 크래시했습니다. 설정을 넣자 경기 중 변경, 경기 종료 후 변경, 라이브 모드 전환을 포함해 18번 중 0번이었습니다. 2hours.gg의 모든 CS2 서버에 이 설정이 들어가 있습니다.

언제 일어나나

다음 조건이 모두 맞을 때입니다:

  • SourceTV (GOTV)가 켜져 있음: tv_enable 1
  • 실제 플레이어가 한 명 이상 접속해 있음. 봇만 있는 서버는 한 번도 크래시하지 않았습니다.
  • 레벨이 바뀜: 콘솔에서 고른 맵, changelevel이나 map, 경기 종료, 경기 종료 투표.

무작위로 일어납니다. 저희 테스트에서는 맵 변경의 약 절반이 크래시했고, 라이브 서버에서는 3명 이상 접속했을 때 더 자주 일어났습니다. 한 번의 맵 변경을 넘긴 서버도 다음에 크래시할 수 있습니다.

증상: 맵 로딩 중 모든 플레이어가 한꺼번에 끊기고, 새 맵이 시작되는 대신 서버 로그가 세그멘테이션 폴트(SIGSEGV)로 끝납니다.

모드별 차이

각 모드의 Valve config가 맵을 불러올 때마다 들어오는 봇 수를 정합니다. 들어오는 봇이 많을수록 크래시할 기회도 많아집니다:

  • Deathmatch, Team Deathmatch, Casual: 로딩마다 최대 10명의 봇이 들어옵니다. 가장 취약하고, 크래시를 가장 많이 본 모드입니다.
  • Competitive: 봇 1명. 저희 랩에서는 해결법 없이도 크래시하지 않았지만, 플레이어가 더 많은 라이브 서버에서는 크래시했습니다.
  • 해결법은 모든 모드에서 같습니다. bot_join_delay는 설정 하나로, 무엇이 계기가 되었든 모든 맵 변경에 적용됩니다.

진짜 버그 (궁금한 분을 위해)

플러그인이 아니라 Valve 엔진 버그입니다. Metamod와 CounterStrikeSharp를 제거해도 크래시했습니다. 2024년부터 다음 이슈로 보고되어 있습니다: ValveSoftware/csgo-osx-linux#3831. 진행 상황은 그곳에서 확인하세요. Valve가 곧 고쳐서 이 우회법이 필요 없어지길 바랍니다.

디버거로 알아낸 것:

  • 맵이 바뀌면 SourceTV가 종료되면서 접속 중인 플레이어를 "SourceTV stopped"(HLTVSTOP) 사유로 끊습니다. 그 플레이어는 GOTV 시청자가 아니라 일반 플레이어인데도 말입니다.
  • 반쯤 끊긴 그 플레이어에게는 빈 내부 객체가 남습니다. 기본 서버에서는 엔진이 바로 거기서 크래시합니다(libengine2.so).
  • 그 단계를 넘기더라도, 1초 뒤 봇이 새 맵에 들어올 때 게임 코드가 크래시합니다(libserver.so). bot_join_delay가 막는 것이 이쪽이며, CounterStrikeSharp 서버에서 본 크래시는 모두 이것이었습니다.
  • Metamod 없는 기본 서버에서는 첫 번째 엔진 쪽 크래시도 봤습니다. 그 크래시에 대해서는 아직 bot_join_delay를 테스트하지 않았습니다.

효과 없는 방법

  • tv_enable 0 게임 중 실행: 모든 플레이어가 한꺼번에 끊깁니다.
  • 부팅 때부터 GOTV 끄기: 크래시는 없지만 데모도 관전도 없습니다.
  • tv_delay, tv_delaymapchange, tv_autorecord 0, tv_stoprecord: 그래도 크래시합니다. 데모를 멈추는 것으로는 부족합니다. 데모를 전혀 녹화하지 않아도 크래시했습니다.
  • bot_quota 0 모드의 _server.cfg에 넣기: 경기 재시작 때마다 실행되고 SourceTV 자체를 킥할 수 있어서, 맵 도중에 GOTV 녹화가 멈춥니다.
  • map changelevel 대신 사용: 똑같이 크래시합니다.

내 서버를 위한 전체 설정

저희가 모든 서버의 server.cfg에 넣는 설정:

tv_enable 1
tv_autorecord 1
bot_join_delay 15
  • 일회성 RCON 명령으로만 두지 말고 server.cfg에 넣어 두세요. 그래야 재시작 후에도 적용됩니다.
  • 저희가 테스트한 값은 15초입니다. 연결이 느린 플레이어나 큰 Workshop 맵은 로딩이 더 오래 걸리므로 더 큰 값이 안전합니다. 봇이 조금 늦게 들어올 뿐입니다.
  • 적용됐는지 확인하려면 서버 콘솔이나 RCON에 입력하세요: bot_join_delay
  • 봇 없이 플레이하나요? 그래도 유지하세요. Deathmatch나 Casual 같은 모드는 기본적으로 맵을 불러올 때마다 봇을 추가합니다.

설정을 건너뛰고 싶다면: 2hours.gg의 모든 CS2 서버에는 이미 이 해결법이 들어가 있고, GOTV와 데모도 켜져 있습니다.

CS2 서버를 시간 단위로 배포하기

함께 보기

← 모든 가이드로 돌아가기