이것이이 질문에 대한 최고의 포럼이 아니라면 용서하십시오. 그러나 프로그래밍 자체보다 커널과 관련이있는 것 같습니다.
통계를 그래프로보고 모니터링 할 수 있도록 시스템에 열린 포트를 쿼리하는 스크립트를 작성 중입니다. 이를 위해 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