5.2 Retransmission과 packet loss
TCP는 packet loss를 재전송으로 복구하지만 tail latency가 증가합니다. Database timeout이 간헐적이고 server CPU와 I/O가 안정적이라면 network counter를 같은 시간대에 확인합니다.
sar -n DEV,TCP,ETCP 1
nstat -az | grep -E 'TcpRetransSegs|TcpExtTCPTimeouts|TcpExtTCPSynRetrans'
ip -s link
누적 counter는 관찰 window 동안의 증가량으로 계산합니다. Host 전체 retransmission은 다른 traffic도 포함하므로 interface, destination, connection 단위로 좁힙니다.
ss -ti dst DB_IP
ss -ti에서 retrans, RTT, congestion window 정보를 볼 수 있습니다. 출력은 kernel version과 congestion control에 따라 다릅니다.
원인 후보
- Interface drop과 error
- MTU 불일치
- Load balancer와 firewall idle timeout
- Network storage와 application traffic 경합
- Receiver가 느려 send buffer가 쌓이는 상황
Packet capture는 payload와 credential을 포함할 수 있습니다. 승인된 interface와 짧은 시간, 제한된 filter로 수집하고 보관 정책을 지킵니다.
sudo tcpdump -i eth0 -nn 'host DB_IP and port 5432' -c 200
Retransmission이 보인다는 이유만으로 database 문제를 배제하지 않습니다. Query response가 매우 커 receiver queue가 포화된 경우 SQL 결과 크기와 network가 함께 원인입니다.