GNU/Linux >> Znalost Linux >  >> Linux

Získejte počet navázaných spojení TCP

Použijte příkaz:

ss -neopt state established

To vám ukáže pouze TCP relace v ESTABLISHED stavu, není potřeba žádné potrubí k dalším příkazům, takže je to super rychlé.

ss je lepší než netstat protože starší netstat pouze čte z procfs, který podléhá uzamčení souborů. ss ve skutečnosti vytváří dotaz uvnitř jádra, který je zpracováván plánovačem jádra a vždy vrací přesné informace.


Použití /proc ke snížení zátěže

Rád přistupuji k proměnným jádra přímo přes /proc . To je velmi efektivní, rychlé a přátelské k systému.

Existuje pseudo soubor (tabulka proměnných jádra) s názvem /proc/net/tcp kdekernel ukládá seznam TCP spojení a naslouchání. Šesté pole s názvem st pro stát může obsahovat 0A pro záznam poslechu a 01 pro navázané spojení.

Počítání TCP zavedeno připojení:

Pomocí grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Pomocí awk
awk  </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'

nebo

awk  </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
Pomocí sed
sed  </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l

Doba provedení

Protože tato otázka znamená vysokou zátěž systému. Udělal jsem malou lavičku:

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 Toniocova odpověď je velmi pomalá, ale velmi zajímavá svou upovídaností. Takže zjevně nepoužitelný na systému s vysokou zátěží.

Tato lavice vám umožní zjistit, že pokud ss je velmi užitečný vyhrazený nástroj, který se ptá na /proc proměnné by mohly být mnohem rychlejší.


Zkontrolujte také:527875.

netstat + grep je dobrá a jednoduchá volba pro několik připojení, ale pokud máte velké množství připojení, doporučil bych ss jak je doporučeno v nixCraft.

Například: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. Získejte stropní celé číslo z čísla v linuxu (BASH)

  2. Jak získat sériové číslo pevného disku pomocí Pythonu

  3. Jak získat počet CPU v Linuxu pomocí C?

  1. Jak zabít jediné TCP spojení v Linuxu?

  2. Node.js – Získejte počet dostupných procesorů

  3. příkaz diff pro získání pouze počtu různých řádků

  1. Získejte aktuální/výchozí hodnotu TCP initcwnd v Linuxu

  2. Přesměrování PuTTY, CygwinX a X11 bylo odmítnuto

  3. Co omezuje maximální počet připojení na serveru Linux?