iproute 패키지의 "ss"명령; 왜 timewait 소켓에 대한 슬래브 테이블을 쿼리합니까?


15

이것이이 질문에 대한 최고의 포럼이 아니라면 용서하십시오. 그러나 프로그래밍 자체보다 커널과 관련이있는 것 같습니다.

통계를 그래프로보고 모니터링 할 수 있도록 시스템에 열린 포트를 쿼리하는 스크립트를 작성 중입니다. 이를 위해 iproute 패키지에서 "ss"명령을 사용하고 있습니다. 실행 ss -s|grep estab하면 다음과 유사한 출력이 수신됩니다.

TCP:   296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0

내 질문은 timewait 변수와 관련이 있으며, TIME_WAIT 상태의 계산 소켓을 보여줍니다. 슬래시 후 참조 된 숫자를 알아 내려고 시도했을 때 소스 코드를 검색하는 회오리 바람이되어 궁극적으로 다음 스 니펫을 찾았습니다.

printf("TCP:   %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
       s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
       sn.tcp_estab,
       s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
       s.tcp_orphans,
       slabstat.tcp_syns,
       s.tcp_tws, slabstat.tcp_tws,
       slabstat.tcp_ports
       );

"slabstat"가 무엇을 의미하는지에 대한 검색은 궁극적으로 / proc / slabinfo의 슬래브 캐시 및보고 인터페이스에 대한 학습으로 이어졌습니다.

질문 : 슬래 블 테이블은 TIME_WAIT 소켓 계산과 어떤 관련이 있습니까? 시도한 모든 서버에서 명령을 실행할 때마다 숫자가 항상 0 이었으므로이 숫자가보고되는 이유를 알 수 없습니다.


정직하게 말해서, 당신은 아마도 관련 커널 메일 링리스트 중 하나에 이것을 게시함으로써 가장 좋은 답변을 얻을 것입니다. tux.org/lkml/#related-lists
jeremiahd

이 코드는 슬래브에 할당 된 대기 소켓 수를 보여줍니다. IMO는 메모리 사용을 결정하는 데 도움이됩니다
Ulrich Dangel

답변:


0

그것은 tcp_tw_buckets궁극적으로 폴링 된 것처럼 보입니다 .Linux 2.6.12에서 제거 된 구조체입니다.

따라서 마지막 숫자는 7 살짜리 커널이 아니면 항상 0 일 것입니다.

슬랩 쿼리에 관해서는 사용 가능한 다른 방법보다 엄청나게 빠릅니다.


2.6.12 이전의 커널에있는 경우 slabstat.tcp_tws 값이 s.tcp_tws와습니까 ? 이 두 값 사이에 차이가 있습니까? (하나는 / proc / net / sockstat에서 온 것이고 하나는 / proc / slabinfo에서 온 것입니다)
ruanhao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.