GNU/Linux >> Linux の 問題 >  >> Linux

確立された TCP 接続の数を取得する

コマンドを使用します:

ss -neopt state established

これにより、ESTABLISHED の TCP セッションのみが表示されます 他のコマンドへのパイプは不要なので、超高速です。

ss netstat よりも優れています 古い netstat のため ファイルロックの対象となる procfs から読み取るだけです。 ss 実際には、カーネル スケジューラによって処理されるカーネル内でクエリを作成し、常に正確な情報を返します。


/proc を使用して負荷を軽減する

カーネル変数にアクセスしたい /proc から直接 .これは非常に効率的で、迅速で、システム フレンドリーです。

/proc/net/tcp という名前の疑似ファイル (カーネル変数テーブル) があります。 wherekernel は、TCP 接続とリッスンのリストを格納します。 st と呼ばれる 6 番目のフィールド 状態 0A を含めることができます listen エントリーと 01 の場合 確立された接続のために。

TCP 確立のカウント 接続:

grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
を使用する awk
awk  </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}'
sed
sed  </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  

Linux
  1. Web サーバーへの最大 TCP 接続を制限する

  2. Linux(BASH)で数値から上限整数を取得する

  3. Cを使用してLinuxでCPUの数を取得するには?

  1. ファイルの行数だけを取得する方法

  2. Linux で物理ディスクの数を取得するには?

  3. Xによって割り当てられたディスプレイ番号を取得する方法

  1. 特定のポートと期間の TCP 接続の総数を IP で調べるにはどうすればよいですか?

  2. Linux サーバーの最大接続数を制限するものは何ですか?

  3. ポート 80 のアクティブな接続数を確認しますか?