렉 걸렸다. 서버 탓일까, 내 탓일까?
이 영상에 나오는 용어 15개.
- 락 경합
- 여러 스레드가 같은 자원을 잡으려고 서로 기다리는 상태다. 서버 틱 처리시간을 늘리는 흔한 원인이다.
- 렉
- 입력한 뒤 결과가 화면에 나타나기까지 늦어지는 체감 지연을 통틀어 부르는 말이다. 원인은 클라, 네트워크, 서버 어디에도 있을 수 있다.
- 메인 스레드 블로킹
- 게임 루프를 돌리는 스레드가 파일 읽기나 긴 연산에 묶여 다음 프레임을 처리하지 못하는 상태다.
- 앱 핑
- 서버의 게임 로직 큐와 틱을 거친 뒤 응답하는 핑이다. 전송 핑과의 차이가 서버 내부 대기 시간이다.
- 영향 범위
- 같은 증상을 겪는 사람이 나 혼자인지, 같은 망인지, 채널 전체인지를 뜻한다. 서버 회선 문제면 네트워크렉도 전체로 번지므로 핑과 함께 본다.
- 전송 핑
- 커널 · 소켓 단에서 재는 TCP RTT다. 게임 로직도, 클라 앱의 프레임 루프도 거치지 않으므로 순수한 네트워크 왕복 시간에 가깝다.
- 지터
- RTT가 일정하지 않고 들쭉날쭉한 정도다. 평균 핑이 낮아도 지터가 크면 움직임이 끊겨 보인다.
- 틱 / 틱레이트
- 서버가 게임 상태를 한 번 갱신하는 주기가 틱이고, 초당 틱 수가 틱레이트다.
20Hz면 한 틱 예산이 50ms다. - 틱 예산
- 한 틱 안에 처리를 끝내야 하는 시간 한도다. 처리시간이 이를 넘기면 다음 틱이 밀리고 틱레이트가 떨어진다.
- 패킷 손실
- 전송 중 패킷이 사라지는 비율이다. 영상의 네트워크렉 구간에서 0%에서 12%로 오른다.
- 프레임타임
- 클라가 화면 한 장(프레임)을 만드는 데 걸린 시간이다. 60fps를 유지하려면 프레임당 16.7ms 안에 끝나야 한다.
- 히치
- 평소 정상이던 프레임 중 하나가 갑자기 수백 ms 걸려 화면이 순간 멈추는 현상이다.
- FPS
- 초당 그리는 프레임 수다. 프레임타임의 역수이며 영상에서는 정상 60, 히치 중 4로 표시된다.
- GC 스파이크
- 가비지 컬렉터가 메모리를 정리하느라 실행을 잠시 멈추는 구간이다. 클라에서는 히치, 서버에서는 틱 지연으로 나타난다.
- RTT (핑)
- 패킷이 클라에서 서버까지 갔다가 응답이 돌아오는 왕복 시간이다.