특정 TCP 포트에서 현재 몇 개의 연결이 열려 있는지 확인하려면 어떻게합니까?


8

나는 혜성 벤치 마크를하고 있으며 얼마나 많은 열린 연결이 있는지 알고 싶습니다.

실제로 netstat를 사용합니다.

netstat -ant | grep 8080 | grep EST | wc -l

그러나 숫자를 나열하는 데 약 4-6 분이 필요합니다. 실시간으로 표시 할 수있는 도구가 있습니까? 열린 연결 수는 100'000-250'000입니다.


달성하려는 목표에 따라 NetFlow 및 분석기 도구 사용을 고려 했습니까?
SpacemanSpiff

@SpacemanSpiff 쉬운 해결책이 있기를 바랍니다. 그러나 HP 스위치를 사용하고 있는지 확실하지 않으므로 NetFlow를 살펴볼 것입니다.
네나드

알다시피, perfmon 또는 WMI 쿼리가 TCP 스택에서이 데이터를 더 빨리 가져올 수 있을지 궁금합니다 ... 여전히 ... 열린 포트 또는 활성 데이터 전송 후입니까?
SpacemanSpiff

@SpacemanSpiff 나는 열린 포트를보고 난 후있다
Nenad

어쩌면 SNMP 쿼리? ... 그냥 아이디어를 버리고 있습니다.
SpacemanSpiff

답변:


8

lsof더 나은지 모르겠지만 시도해보십시오.

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l

실제로 lsof 5 초 걸리지 만 20,000 연결 및 계산 :-) 100K 통과 후 얼마나 오래 알 수 있습니다
Nenad

업데이트 : 혜성 클라이언트에 문제가 있지만 lsof는 30'000 연결에 대해 10 초가 훨씬 빠릅니다. 혜성 문제를 해결 한 후 업데이트되어 100K 이상의 연결을 확인할 수있었습니다
Nenad

업데이트 : 15 초는 130'000 연결을 표시합니다-감사합니다! 이것은 네트워크 분석기를 사용해야하는보다 자세한 솔루션을 위해 나를 위해 일합니다.
네나드

근사하다! 당신은 또한 스위치를 사용할 수 있습니다 -t-아마도 이것은 당신에게 약간의 부스트를 줄 것입니다.
ThorstenS

5

연결 통계 만 보려면 제품군 ss에서 유틸리티를 사용해보십시오 iproute.

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

또한 다음과 같이 설정된 모든 연결에 대한 자세한 정보를 볼 수 있습니다.

ss -n state established

… 또는 ssh 연결 만 :

ss -n state established '( dport = :ssh or sport = :ssh )'

이 페이지 하단의 일부 숫자 섹션 도 관심 있을 수 있습니다.


더 이상 사용되지 않는 netstat를 사용하지 않아 +1
Joshua Griffiths

나는 이것이 6 년 전의 것이라는 것을 알고 있지만, 당신이나 다른 사람은 ss 상태 출력을 분해하는 것에 대한 링크를 가지고 있습니까? TCP 라인 끝의 포트 수에 대해 특히 궁금합니다. 로드 밸런서 역할을하는 두 서버 사이의 비교 테스트를 수행하고 있으며 포트 수는 약 1000이고 다른 서버는 항상 0입니다. 그 수는 구체적으로 무엇입니까?
RobertRSeattle

1
ss 소스 코드로 @RobertRSeattle이 번호는 파일 tcp_bind_bucket줄 에서 읽은 것으로 보입니다 /proc/slabinfo. awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfo두 서버 사이의 출력을 비교할 수 있습니다. 자세한 내용은 커널 소스 어딘가에 있습니다.
artyom

1

다른 옵션은 /proc/net/tcp직접 읽는 것 입니다. 8080에서 설정된 모든 TCP 연결을 보려면 다음과 같이하십시오.

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

단일 프로세스 (IO 오버 헤드가 적음)로 처리하고 코너 사례를 처리하려는 경우 다음은 로컬 포트 ​​8080이있는 ESTABLISHED TCP 연결 수를 나타냅니다.

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

8080을 수신하는 컴퓨터의 소프트웨어가 IPv6을 지원하는 경우 읽어야 /proc/net/tcp6합니다. 프로그램이 IPv6 소켓을 사용하는 경우 IPv4를 사용하더라도 연결이 표시됩니다.


0

더 쉬운

#netstat -at | wc -l

시스템의 TCP 연결 수를 표시합니다 ...


"n"플래그를 사용하여 모든 호스트 이름을 찾지 못하게되므로 시간이 더 오래 걸립니다. 또한 질문에 관한 포트 8080 연결 이외의 것들도 보여줄 것입니다.
Jenny D
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.