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状態の計算されたソケットを示す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ソケットの計算とどう関係しますか?試したすべてのサーバーでコマンドを実行するたびに、この数値は常にゼロであったため、この数値が報告される理由を把握できていません。


正直なところ、関連するカーネルメーリングリストのいずれかにこれを投稿すると、おそらく最良の回答が得られます。tux.org
lkml /

このコードは、スラブに割り当てられている待機ソケットの数を示しています。IMOそれだけでメモリ使用量を決定するのに役立ちます
ウルリッヒDangel

回答:


0

ように見えtcp_tw_buckets、最終的にポーリングされているものであるのLinux 2.6.12のように除去構造体です、

したがって、7年前のカーネル上にない限り、最後の数字はおそらく常に0になります。

スラブのクエリに関しては、私が知る限り、他の利用可能な方法よりも途方もなく高速です。


2.6.12より前のカーネル上にある場合、値slabstat.tcp_twsはs.tcp_twsに等しくなりますか?これらの2つの値に違いはありますか?(1つは/ proc / net / sockstatから、もう1つは/ proc / slabinfoから)
-ruanhao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.