비동기 로깅(메모리 버퍼 + 별도 스레드), 로그 양 줄이기, 게임 스레드에서 fsync 하지 않기.
인프라팀 할 일
로그 로테이션·압축은 I/O 우선순위를 낮춰 실행, 로그를 데이터와 다른 디스크에, 디스크 쓰기 지연 모니터링.
그래프에서는
가끔 무작위로 튐 · 서버 틱 시간, 디스크 쓰기 지연
확인할 곳
iostat -x 1의 w_await·aqu-sz를 틱 시간과 겹쳐 보고 perf trace -p PID --duration 10으로 게임 서버에서 10ms 넘게 걸린 write·fsync 호출과 그 스레드를 찾음
이러면 맞음
틱이 튄 시각에 게임 스레드의 write·fsync 호출이 수십 ms 걸리고, 그 순간 디스크 쓰기 지연도 솟음. 로그 로테이션·압축 시각과 겹치는 경우가 많음
이러면 아님
게임 스레드에 오래 걸린 시스템 호출이 없는데 틱이 튀면 GC·락·틱 예산 초과 같은 다른 원인. 로그 전용 스레드만 오래 걸리면 게임 진행에는 영향이 없음
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
보통 OS는 쓰기를 먼저 메모리(페이지 캐시)에 받아 두고 나중에 디스크로 내려보내서, 로그 한 줄은 대개 곧바로 끝납니다. 멈춤은 fsync로 확실한 저장을 요구할 때, 밀린 쓰기가 한도를 넘어 OS가 쓰기 호출을 블로킹할 때, 로그 파일을 로테이션하거나 압축할 때 생깁니다. 평소엔 멀쩡하다가 디스크가 바쁜 순간에만 튑니다.