시스템

리눅스에서 네트워크 지연(Latency) 원인 진단과 즉시 적용 팁

JihwanGo 2025. 9. 10. 15:47
반응형

요즘 클라우드 워크로드와 AI 앱이 많아지면서, 눈에 띄게 네트워크 지연 문제가 더 자주 터지고 있네요. 이전 글들처럼(Zero Window나 패킷 Overrun 같은), 오늘은 "리눅스에서 네트워크 지연 원인 진단과 즉시 적용 팁"을 다뤄보겠습니다. 서버 관리자나 개발자들이라면 언젠가 반드시 마주칠 이슈이니, 이번 기회에 확실히 익혀두면 큰 도움이 될 거예요.

네트워크 지연(Latency)은 데이터가 보내고 받는 데 걸리는 시간입니다. 이게 심해지면 웹사이트가 버벅거리고, VoIP 통화가 끊기며, 앱 성능이 뚝 떨어지죠.

네트워크 지연은 크게 세 가지 유형으로 나눌 수 있습니다.

1. 네트워크 혼잡 (Congestion): 트래픽이 폭증하면 큐잉이나 패킷 드랍이 발생합니다. 이는 서버에 부하가 높을 때, 또는 같은 네트워크를 쓰는 다른 장비(예: 넷플릭스 스트리밍이나 윈도우 업데이트) 때문에 생기는 간섭이 원인일 수 있습니다.
2. 물리적/하드웨어 제한: 데이터센터와의 물리적 거리가 너무 멀거나(국제 연결), 서버의 네트워크 카드(NIC) 버퍼가 작을 때 지연이 증가합니다. 또한, 케이블이 낡았거나 Duplex(이중 통신) 설정이 잘못되어도 발생합니다.
3. 소프트웨어 설정 오류: 리눅스 서버의 TCP 설정(예: TCP Window 크기)이 비효율적이거나, 방화벽(iptables) 규칙이 패킷 처리를 늦출 수 있습니다. 특히 **버퍼블로트(Bufferbloat)**는 버퍼 크기가 너무 커서 큐가 쌓이는 현상으로, 리눅스에서 자주 발생하는 문제입니다.

문제 진단 방법: 4단계 명령어로 바로 확인하기

진단은 리눅스 기본 명령어만으로 충분합니다. 단계별로 따라 해보세요!

1. 기본 지연 측정: ping 가장 먼저 ping으로 서버와 목적지 간의 평균 RTT(왕복 시간)를 확인하세요. 50ms 이상이면 문제가 있다고 볼 수 있습니다.

$ ping google.com -c 10
# RTT 평균(avg) 시간을 확인합니다.

2. 경로 추적: mtr ping으로는 어디서 지연이 발생하는지 알 수 없습니다. mtr은 각 라우터(홉)에서 지연과 패킷 손실을 동시에 보여줘, 어느 구간이 문제인지 정확히 짚어줍니다. (sudo apt install mtr로 설치)

$ mtr google.com
# 각 홉에서 지연(Latency)과 패킷 손실(Loss)을 확인해 문제 구간을 찾습니다.

3. 패킷 캡처: tcpdump 지연이 특정 상황에서만 발생한다면, tcpdump로 패킷을 직접 캡처해야 합니다. 패킷 재전송(Retransmission)이나 Zero Window 같은 TCP 플래그를 확인해볼 수 있습니다.

# eth0 인터페이스로 들어오는 패킷을 실시간으로 확인
$ sudo tcpdump -i eth0 -n

4. 시스템 상태 체크: ethtool & sysctl 시스템 자체의 문제도 확인해야 합니다. ethtool로 NIC의 오버런(overruns)이나 에러를 확인하고, sysctl로 현재 커널 네트워크 설정을 점검합니다.

# NIC의 패킷 오류 통계 확인
$ ethtool -S eth0

# 현재 네트워크 버퍼 설정 확인
$ sysctl net.core.rmem_max

즉시 적용 팁: 진단 후 바로 고쳐보세요!

위 진단으로 원인을 파악했다면, 아래 팁들을 바로 적용해 볼 수 있습니다. (영구적으로 적용하려면 /etc/sysctl.conf 파일을 수정하세요.)

1. 버퍼 크기 조정: 네트워크 혼잡으로 drops가 많다면, 수신 버퍼 크기를 늘려 패킷을 잃어버리는 현상을 줄일 수 있습니다.

# 수신(receive) 버퍼 최대 크기 증가
$ sudo sysctl -w net.core.rmem_max=16777216

2. QoS/Qdisc 설정: 버퍼블로트 문제에는 fq_codel 같은 큐잉 디사이플린(Qdisc)을 사용해 트래픽을 공정하게 제어하면 지연을 줄일 수 있습니다.

# fq_codel 큐잉 디시플린 적용
$ sudo tc qdisc add dev eth0 root fq_codel

3. MTU 최적화: MTU(Maximum Transmission Unit) 불일치로 지연이 생긴다면, 네트워크 환경에 맞게 MTU 값을 조정해 줍니다.

# MTU 값을 9000으로 설정
$ sudo ifconfig eth0 mtu 9000

 

주의: 이 설정은 네트워크 전체에 영향을 미칠 수 있으니, 충분히 확인한 후 적용해야 합니다.

4. 기타: Wi-Fi 간섭이라면 유선 네트워크로 전환하거나 채널을 바꿔보세요. 서버 자체의 CPU/메모리 사용량이 높다면 top이나 htop으로 고부하 프로세스를 찾고 kill하는 것이 급선무입니다.

이 팁들을 적용한 후, 다시 ping으로 지연 시간이 줄었는지 확인해보세요. 대부분 20~50% 정도의 개선 효과를 볼 수 있을 겁니다.

네트워크 지연은 결코 미스터리가 아닙니다. 눈에 보이지 않을 뿐, 리눅스 서버에는 모든 단서가 숨어 있습니다.

반응형