これがこの質問に最適なフォーラムではない場合はご容赦ください。ただし、プログラミング自体よりもカーネルに関連しているようです。
統計をグラフ化して監視できるように、開いているポートをシステムに照会するスクリプトを作成しています。このために、iprouteパッケージの「ss」コマンドを使用しています。 ss -s|grep estab
を実行した場合 次のような出力が表示されます:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
私の質問は、TIME_WAIT状態の計算されたソケットを表示するtimewait変数に関係しています。スラッシュの後に参照されている番号を見つけようとすると、ソースコードを検索するという旋風の冒険になり、最終的に次のスニペットを見つけることになりました。
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ソケット計算と何の関係がありますか?試したすべてのサーバーでコマンドを実行するたびに、この数値は常にゼロであるため、この数値が報告される理由を理解できていません。
承認された回答:
tcp_tw_buckets
のようです これは最終的にポーリングされるものであり、Linux2.6.12の時点で削除された構造体です
したがって、7年前のカーネルでない限り、最後の数値はおそらく常に0になります。
スラブのクエリに関しては、私が知る限り、他の利用可能な方法よりも途方もなく高速です。