패킷 캡처에서 ZeroWindow를 보낸 쪽(소켓을 못 읽는 쪽)부터 확인, 네트워크 수신은 별도 스레드에서 계속 읽기, 수신 버퍼 적정 크기. 클라이언트: 로딩·GC 같은 프레임 멈춤 원인 해결. 서버: 소켓을 읽는 스레드가 막히는 원인 해결.
인프라팀 할 일
서버의 nstat TcpExtTCPToZeroWindowAdv(서버가 수신 윈도우를 0으로 알린 횟수)를 모니터링에 추가(늘면 서버 쪽이므로 서버 개발에 전달), 서버 쪽 패킷 캡처 제공.
그래프에서는
끊겼다가 몰아서 · 연결별 수신량, 제로 윈도우 횟수
확인할 곳
패킷 캡처에서 Wireshark 필터 tcp.analysis.zero_window로 윈도우 0을 알린 쪽을 찾음. 서버의 nstat에서는 TcpExtTCPToZeroWindowAdv(서버가 윈도우 0을 알림)와 TcpExtTCPWinProbe(상대의 윈도우 0에 프로브를 보냄)를 나눠 보고, 서버 소켓의 Recv-Q(ss에서 프로그램이 아직 읽지 않은 바이트)를 봄
이러면 맞음
멈춘 동안 재전송은 없고 제로 윈도우와 프로브만 오감. 서버의 TcpExtTCPToZeroWindowAdv나 서버 소켓의 Recv-Q가 늘면 서버가 제때 읽지 못하는 것, TcpExtTCPWinProbe가 늘면 클라이언트가 제때 읽지 못하는 것