느린 성능 문제 해결: 'netstat' 및 'ss' 효과적으로 사용하기

효율적인 성능 문제 해결을 위해 필수 Linux 네트워킹 도구인 `netstat`과 `ss`를 마스터하세요. 이 가이드는 기존의 `netstat`과 최신이며 더 빠른 `ss` 유틸리티를 비교하고, 실용적인 명령어 예시를 제공합니다. 연결 상태별로 결과를 필터링하고, 수신 대기 서비스를 식별하며, Netlink 소켓 통계를 사용하여 네트워크 병목 현상을 신속하게 진단하는 방법을 알아보세요.

35 조회수

느린 성능 문제 해결: 'netstat' 및 'ss' 효과적으로 사용하기

Linux 시스템에서 애플리케이션 성능 저하나 예기치 않은 연결 동작을 진단할 때 네트워크 스택은 종종 가장 먼저 살펴보는 곳입니다. 확립된 연결, 수신 대기 중인 연결, 임시 연결을 이해하는 것은 병목 현상, 악성 프로세스 또는 보안 이상을 식별하는 데 중요합니다. 역사적으로 관리자들은 netstat 유틸리티에 크게 의존했습니다. 그러나 최신 Linux 배포판은 더 빠르고 기능이 풍부한 ss (socket statistics) 유틸리티를 선호합니다.

이 가이드에서는 netstatss를 포괄적으로 비교하고, 두 도구를 모두 효과적으로 사용하여 TCP 및 UDP 소켓을 모니터링하고, 연결 상태를 분석하고, 시스템의 성능 문제를 정확히 찾아내는 방법을 자세히 설명합니다.


네트워크 소켓을 모니터링해야 하는 이유?

네트워크 지연 및 느린 속도는 CPU 또는 메모리 부족보다는 연결 문제와 자주 관련이 있습니다. 소켓 모니터링은 관리자가 다음과 같은 중요한 질문에 답하는 데 도움이 됩니다.

  • 어떤 포트가 활발하게 연결을 수신 대기하고 있습니까?
  • SYN_RECV 또는 TIME_WAIT 상태에 너무 많은 연결이 고착되어 있습니까?
  • 어떤 프로세스(PID)가 특정 포트를 사용하고 있습니까?
  • 예기치 않은 아웃바운드 연결이 발생하고 있습니까?

소켓 통계를 검사하면 네트워크 구성 문제를 신속하게 배제하거나 연결 처리와 관련된 리소스 경합을 식별할 수 있습니다.

레거시 도구: netstat

netstat은 수십 년 동안 네트워크 연결, 라우팅 테이블, 인터페이스 통계 및 마스커레이드 연결을 표시하는 표준 유틸리티였습니다. 많은 최신 시스템에서 ss를 선호하여 사용되지 않게 되었지만, 여전히 널리 사용 가능하며 오랜 관리자에게 익숙합니다.

일반적인 netstat 예시

netstat과 함께 가장 일반적으로 사용되는 플래그는 포괄적인 개요를 제공합니다.

플래그 설명
-a 모든 소켓(수신 대기 중인 소켓 및 수신 대기 중이 아닌 소켓)을 표시합니다.
-n 호스트 이름 및 서비스 이름을 확인하려고 시도하는 대신 숫자 주소를 표시합니다(출력 속도 향상).
-t TCP 연결을 표시합니다.
-u UDP 연결을 표시합니다.
-l 수신 대기 중인 소켓만 표시합니다.
-p 소켓과 관련된 PID/프로그램 이름을 표시합니다(루트 권한 필요).

예: 모든 활성 TCP 연결을 숫자로 보기

sudo netstat -ant

예: 80번 포트(HTTP)에서 수신 대기 중인 것 찾기

sudo netstat -antlp | grep ':80'

연결 상태 이해 (netstat)

netstat의 출력에는 종종 State 열이 포함됩니다. 주목해야 할 주요 상태는 다음과 같습니다.

  • LISTEN: 들어오는 연결을 기다립니다.
  • ESTABLISHED: 활성, 열린 연결입니다.
  • TIME_WAIT: 지연된 패킷이 처리되도록 닫은 후 짧은 기간 동안 대기하는 소켓입니다.
  • SYN_RECV: 3방향 핸드셰이크의 최종 승인을 기다립니다(과도할 경우 SYN 플러드 공격을 나타낼 수 있습니다).

netstat에 대한 경고: netstat은 종종 /proc/net/* 파일을 구문 분석하는 데 의존하며, 특히 활성 연결이 매우 많은 시스템(수천 개)에서는 느릴 수 있습니다. 이것이 ss가 개발된 주된 이유입니다.

최신 대체 도구: ss (Socket Statistics)

ss 유틸리티는 Netlink 소켓을 사용하여 커널 공간에서 직접 소켓 정보를 검색하고 느린 파일 시스템 조회를 우회하기 때문에 netstat보다 훨씬 빠릅니다.

일반적인 ss 예시

ss의 플래그 구조는 netstat과 매우 유사하여 전환이 용이합니다.

플래그 설명
-a 모든 소켓을 표시합니다.
-n 숫자 주소를 표시합니다.
-t TCP 소켓을 표시합니다.
-u UDP 소켓을 표시합니다.
-l 수신 대기 중인 소켓을 표시합니다.
-p 프로세스 정보(PID/프로그램)를 표시합니다.

예: 모든 활성 TCP 연결을 숫자로 보기 (netstat -ant와 동일)

ss -ant

예: 443번 포트(HTTPS)에서 수신 대기 중인 것 찾기

sudo ss -antlp | grep ':443'

ss를 사용한 고급 필터링

ss의 가장 큰 장점 중 하나는 netstat 출력을 grep으로 파이핑하는 것보다 훨씬 효율적인 연결 상태에 대한 직접 필터링을 수행할 수 있다는 것입니다.

연결 상태별 필터링

ss 명령 내에서 직접 state 옵션을 사용할 수 있습니다. 이는 연결 누적을 진단하는 데 매우 유용합니다.

현재 TIME-WAIT 상태에 있는 모든 소켓 찾기:

ss -s state time-wait

SYN-SENT 상태에 있는 모든 소켓 찾기 (클라이언트 측에서 서버 응답 대기 중):

ss -s state syn-sent

포트 또는 주소별 필터링

대상 또는 소스 주소/포트별 필터링은 간단합니다.

22번 포트(SSH)를 대상으로 하는 확립된 연결 표시:

ss -tn state established '( dport = :22 or sport = :22 )'

특정 로컬 IP 주소와 관련된 연결 표시:

ss -ant '( daddr = 192.168.1.100 or saddr = 192.168.1.100 )'

성능 분석: netstat vs. ss 비교

문제를 해결할 때 도구 선택은 종종 속도와 세부 정보에 따라 달라집니다.

기능 netstat ss
속도 느림 (파일 읽기) 훨씬 빠름 (Netlink 소켓 사용)
구문 성숙하고 잘 문서화됨 유사한 플래그, 최신 특정 옵션
필터링 grep으로 파이핑 필요 네이티브 상태 및 주소 필터링 지원
정보 깊이 기본 사항에 좋음 소켓 버퍼 크기에 대한 더 많은 세부 정보 (TCP 정보)
가용성 거의 보편적 최신 Linux 배포판에서 표준

느린 연결 설정 진단

클라이언트에서 연결이 느리다고 보고하는 경우 핸드셰이크를 기다리며 고착된 소켓을 확인하세요. 이를 결정하는 가장 빠른 방법은 ss를 사용하는 것입니다.

  1. 높은 SYN-RECV 개수 확인: 서버가 연결 요청을 받고 있지만 핸드셰이크를 완료하지 못하고 있음을 시사하며, 종종 리소스 부족 또는 높은 트래픽 로드로 인해 발생합니다.
    bash ss -s | grep syn-rec
  2. 높은 SYN-SENT 개수 확인: 서버 자체가 많은 연결을 시작하는 경우(예: 데이터베이스 또는 다른 API에 대한 클라이언트 역할), 이는 서버가 응답을 기다리고 있음을 나타냅니다.
    bash ss -s | grep syn-sent

이 범주에서 비정상적으로 높은 숫자가 보이면 해당 연결을 시작하는 애플리케이션이 네트워크 지연 또는 방화벽 문제에 직면하고 있을 가능성이 높습니다.

네트워크 문제 해결을 위한 모범 사례

  1. 항상 -n 사용: 성능을 진단하거나 스크립트를 작성할 때 DNS 확인 지연을 피하기 위해 숫자 플래그 (-n)를 사용하여 진단 속도를 높이세요.
  2. ss 우선 사용: 기본 도구로 ss를 채택하세요. ss를 사용할 수 없는 레거시 시스템에만 netstat을 사용하세요.
  3. PID를 위해 루트로 실행: 포트를 사용하는 프로그램을 보려면 일반적으로 두 유틸리티 모두에서 -p 플래그를 사용할 때 sudo 또는 루트 권한이 필요합니다.
  4. 인터페이스 통계 확인: 인터페이스 카운터를 잊지 마세요. 패킷 손실이나 오류를 확인하려면 ip -s link show <interface_name>을 사용하여 소켓 문제보다는 물리적 계층 문제일 가능성을 확인하세요.

ss의 최신 기능을 숙달하고 netstat이 제공하는 기본 컨텍스트를 이해함으로써 시스템 관리자는 모든 Linux 호스트의 네트워크 상태에 대한 강력한 통찰력을 얻고 성능 진단 속도를 크게 높일 수 있습니다.