У меня есть сервер с примерно 65k подключениями в ip_conntrack. Как оптимизировать скрипт munin, который учитывает различные типы подключений (по умолчанию fw_conntrack
скрипт):
cat /proc/net/ip_conntrack | awk '
BEGIN {
STATE["ESTABLISHED"]=STATE["FIN_WAIT"]=STATE["TIME_WAIT"]=0;
TOTAL=ASSURED=NOREPLY=STATE["SYN_SENT"]=STATE["UDP"]=0;
}
/^tcp/ { STATE[$4]++; }
/^udp/ { STATE["UDP"]++; }
/ASSURED/ { ASSURED++; }
{
TOTAL++;
}
END {
print "established.value " STATE["ESTABLISHED"];
print "fin_wait.value " STATE["FIN_WAIT"];
print "time_wait.value " STATE["TIME_WAIT"];
print "syn_sent.value " STATE["SYN_SENT"];
print "udp.value " STATE["UDP"];
print "assured.value " ASSURED;
print "total.value " TOTAL;
}'
В настоящее время на выполнение требуется около 30 секунд.
Заменить cat /proc/net/ip_conntrack
с участием conntrack -L
. Это более эффективно при большом количестве подключений.
Пример:
root@utemp:~# time conntrack -L | wc -l
conntrack v0.9.14 (conntrack-tools): 16855 flow entries have been shown.
16855
real 0m0.099s
user 0m0.068s
sys 0m0.036s
root@utemp:~# time cat /proc/net/ip_conntrack | wc -l
16634
real 0m0.270s
user 0m0.008s
sys 0m0.264s