Linux netstat의 사용 및 출력에 대해 질문이 있습니다. 내 서버가 통신 지연 및 병목 현상에 직면한 딜레마를 해결하려고 노력 중이어서 파고들고 조사하기 시작했습니다. 제가 알아야 할 한 가지는 IP 주소별로 그룹화된 연결의 전체 목록과 해당 연결 수의 개수입니다. 확립되었으므로 먼저 다음을 얻습니다.
[root@ip-localhost ec2-user]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
...
9 77.70.115.30
14 54.211.25.39
198 172.31.30.15
3951
문제는 IP당 나열된 연결 수를 합산하면 얻은 총계가 3951이 아니고 44K 이상으로 증가하므로 IP 주소가 없는 최종 행 수는 무엇을 의미합니까? 파일 설명자? 내부 커널 연결이 가능합니까? 시스템의 개방형 소켓을 잊으셨나요?
나는 또한 이러한 연관성을 요약했습니다.
[root@ip-localhost ec2-user]# netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
1 established)
1 Foreign
4 FIN_WAIT1
8 SYN_SENT
57 LISTEN
67 SYN_RECV
180 TIME_WAIT
1040 LAST_ACK
6323 CLOSE_WAIT
7209 ESTABLISHED
````
참고: netstat 출력 끝에 나열된 연결에는 총계가 없기 때문에 전체 출력을 삽입해야 했습니다. 감사해요
답변1
글쎄요, awk를 적용하고 출력을 자르기 전에 먼저 netstat 명령을 이해해야 한다고 생각합니다.
netstat -ntu
tcp6을 포함하여 모든 udp 및 tcp 연결이 표시됩니다. 따라서 netstat 명령의 출력에 awk & cut을 적용하려고 하면
netstat -ntu | awk '{print $5}' | cut -d: -f1
그런 다음 잘라내기 명령은 ":"을 구분 기호로 선택하고 첫 번째 필드를 표시합니다.
TCP v4 연결은 다음과 같습니다
12.34.56.78:80
netstat 출력에서 tcp v6 연결은 다음과 같습니다.
::1:631
이제 구분 기호 ":"를 사용하여 잘라내기를 적용하면 tcp v4 연결의 출력에는 IP 주소가 표시되지만 tcp v6의 출력은 빈 줄이 됩니다. 그리고 sort|uniq -c를 적용하면 빈 줄이 계산됩니다.
웹 서버에 대한 모든 TCP 연결을 나열하려면 다음을 시도하십시오.
netstat -npa | grep pid_of_your_web_server | grep ESTABLISHED | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c
또는 웹 서버와 관련된 모든 TCP 연결
netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c
그룹화하지 않고 모든 합계 계산
netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | wc -l
답변2
오래된 주제로 넘어가서 미안하지만 개선하기에는 너무 늦지 않았습니다. 다음과 같이 grep에 리소스를 낭비하는 대신 모든 것에 대해 awk를 사용하는 것은 어떨까요?
netstat -npa | awk -F: '/tcp/&&/LISTEN/ {print $1}' | sort | uniq -c