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í grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Pomocí awkawk </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í sedsed </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