Az ip_conntrack memoria felhasznalasa

Linux netfiltert sokan hasznalnak.
En is :)
idonkent feltunik egy erdekes hibauzenet mondvan, hogy "ip_conntrack: table full"
Ez rendben is van. Meg azt is tudom, hogy lehet megemelni a tabla meretet. Na de mennyivel, hogy ne legyen baj belole?
Vegtere is mernok lennek, keptelenseg, hogy ezt ne lehetne kiszamolni...

Talaltam is egy jo kis leirast a problemarol itt:
http://www.wallfire.org/misc/netfilter_conntrack_perf.txt

A dolog lenyege a kovetkezo keplet:

conntrack mem (b) = CONNTRACK_MAX * sizeof(struct ip_conntrack) + HASHSIZE * sizeof(struct list_head)

Alabbi script kis is szamolja neked, ha bator vagy es lefuttatod rootkent:



#!/bin/bash

PAGESIZE=4
echo Page size: $PAGESIZE

if [ x$1 == x ]
  then	CONNTMAX=`sysctl -n net.ipv4.netfilter.ip_conntrack_max`
  else	CONNTMAX=$1
fi

echo Max entries: $CONNTMAX

FILES=`ls -t /var/log/kern.log*`
STRUCT_IP_CONNT=`zgrep "ip_conntrack version" $FILES | awk '{print $(NF-3)}'| tail -1`

echo "IP conntrack struct size: $STRUCT_IP_CONNT"
CONNT_BUCKETS=`sysctl -n net.ipv4.netfilter.ip_conntrack_buckets`
echo "Conntrack Buckets (hash size): $CONNT_BUCKETS"

((MEMUSE=$CONNTMAX*$STRUCT_IP_CONNT+$CONNT_BUCKETS*2*$PAGESIZE))
echo "$CONNTMAX*$STRUCT_IP_CONNT+$CONNT_BUCKETS*2*$PAGESIZE"
echo "CONNTRACK_MAX * sizeof(struct ip_conntrack) + HASHSIZE * sizeof(struct list_head)"


MB=`echo scale=2\; $MEMUSE/1024/1024 | bc`
echo "Conntrack memory usage: $MB MB"

Amikor dedikalt tuzfalat (keves memoriaval) vagy csak nagy forgalmu szervert futtatsz conntrack hasznalata mellett, nem jelentektelen mennyisegu memoria fogyhat el erre a celra.
Nem is beszelve egy LVS directorrol :)

A munkahelyi gepemen maximum 13.3MB memoriat fogyaszthat. Na nem mintha valaha betelne a tabla :)

Tipp: ha megis betelne a conntrack tabla, nem biztos, hogy a meretet kell megemelni.
A net.ipv4.netfilter.ip_conntrack_tcp_timeout_established sysctl kulcsot megnezven feltunhet, hogy alapertelmezesben 5 nap a kapcsolatok timeoutja a conntrack tablabol. Ezt azert lejjebb lehet venni.
A kockazatot persze te vallalod :-D

Hozzászólások

Hasonló problémával én is találkoztam az egyik szerveren, így gyorsan meg is néztem a net.ipv4.netfilter.ip_conntrack_tcp_timeout_established értékét. Sajnos a 2.4-es kernelnél még nincs ilyen sysctl kulcs. :-(
Köszi az ötletet, majd upgrade után kipróbálom, ha lesz még rá szükségem.

Üdv: Webappz

http://webappz.hu

Ez a timeout tényle érdekes, lehet lejjebb kellene venni nekem is. A többi timeout értéket is változtathatom, vagy csak a tcp established-et?

Petya

Szia,

kipróbáltam scriptet, kijött, hogy 4096 MB, de ez vicc, mert 65535 a tábla mérete, hash 8192, és itt kb 16 MB-nak kéne lenni.

Szerinted?

Van 2 giga a gépben, és jó lenne megnövelni táblát...

Köszi,
Tom