コマンドを使用します:
ss -neopt state established
これにより、ESTABLISHED
の TCP セッションのみが表示されます 他のコマンドへのパイプは不要なので、超高速です。
ss
netstat
よりも優れています 古い netstat
のため ファイルロックの対象となる procfs から読み取るだけです。 ss
実際には、カーネル スケジューラによって処理されるカーネル内でクエリを作成し、常に正確な情報を返します。
/proc を使用して負荷を軽減する
カーネル変数にアクセスしたい /proc
から直接 .これは非常に効率的で、迅速で、システム フレンドリーです。
/proc/net/tcp
という名前の疑似ファイル (カーネル変数テーブル) があります。 wherekernel は、TCP 接続とリッスンのリストを格納します。 st
と呼ばれる 6 番目のフィールド 状態 0A
を含めることができます listen エントリーと 01
の場合 確立された接続のために。
TCP 確立のカウント 接続:
grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
を使用する awkawk </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'
を使用する または
awk </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
sedsed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
を使用する 実行時間
この質問は、高負荷システムを表しています。私は小さなベンチを作りました:
Method Answer by Milliseconds grep Techno 2.48 awk no regexp ($4=="01") 2.51 sed | wc 2.67 awk with regexp 2.93 ss -neopt state established | wc -l Suprjami 15.14 lsof -i tcp -s tcp:ESTABLISHED Tonioc 25055.00
Ok Tonioc の答えは非常に遅いですが、彼の冗長さは非常に興味深いものです。そのため、ワークロードの高いシステムでは明らかに使用できません。
このベンチでは、ss
の場合 /proc
を要求する非常に便利な専用ツールです。 変数の方がはるかに高速です。
こちらもご確認ください:527875.
netstat + grep
接続数が少ない場合は単純なオプションですが、接続数が非常に多い場合は ss
をお勧めします nixCraft で推奨されているとおりです。
例:ss -s
Total: 78 (kernel 79)
TCP: 31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16
Transport Total IP IPv6
* 79 - -
RAW 0 0 0
UDP 4 2 2
TCP 31 2 29
INET 35 4 31
FRAG 0 0 0