Usando o / proc para reduzir a carga de trabalho
Eu gosto de acessar variáveis do kernel diretamente através de /proc
. Isso é muito eficiente, rápido e amigável ao sistema.
Existe um pseudo arquivo (tabela de variáveis do kernel) chamado /proc/net/tcp
onde
lista de armazenamento do kernel de conexão TCP e escuta. O sexto campo, chamado st
para estado , pode conter 0A
para uma entrada de escuta e 01
para uma conexão estabelecida.
Contando conexões TCP estabelecidas :
Ao usar grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Ao usar awk
awk </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'
ou
awk </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
Ao usar sed
sed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
Tempo de execução
Como esta questão significa alto sistema de carga de trabalho. Eu fiz um pequeno banco:
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
A resposta de Ok Tonioc é muito lenta, mas muito interessante por sua verbosidade. Então, claramente não é utilizável no sistema de alta carga de trabalho.
Este banco permite que você veja se ss
é uma ferramenta dedicada muito útil, pedir /proc
variáveis pode ser muito mais rápido.