Portál AbcLinuxu, 19. dubna 2024 01:02


Dotaz: iptables: Memory allocation problem

9.5.2014 08:17 Pinon | skóre: 7
iptables: Memory allocation problem
Přečteno: 723×
Odpovědět | Admin
Ahoj, mám upravené distro slackware na kterém se zavádí tísíce pravidel do iptables. Problém je, že mi distro příjme zhruba 9000 pravidel a poté začne vracet toto:
iptables: Memory allocation problem
iptables: Memory allocation problem
iptables: Memory allocation problem
iptables: Memory allocation problem
iptables: No chain/target/match by that name
iptables: No chain/target/match by that name
iptables: No chain/target/match by that name
Myslel jsem si, že bude problém způsobený nedostatkem virtuální adresové paměti

root@shaper:/# cat /proc/meminfo 
MemTotal:      2039756 kB
MemFree:       1887844 kB
...
VmallocTotal:   114680 kB
VmallocUsed:     39184 kB
VmallocChunk:    37676 kB
Ale při načítání pravidel se VmallocUsed postupně naplňuje až do 40MB to jsou všechna pravidla načetlá, zbývá asi 75MB.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.5.2014 09:29 LinuxakMichal
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebezi ti to v OpenVZ, Plesk Parallels nebo tak neco? Existuje soubor /proc/user_beancounters ? pokud ano posli obsah.
9.5.2014 10:46 Pinon | skóre: 7
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
nn, je to postavené na slackware, přímo spuštěný linux na HW, žádná virtualizace. Snaha byla co nejvíce systém ořezat, zkompilovat vlastní jádro s podporou určitého hw.

Soubor /proc/user_beancounters neexistuje.
9.5.2014 16:54 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Odpovědět | | Sbalit | Link | Blokovat | Admin

Není něco v logu jádra? Pokud ne, zkuste ještě nejdřív použít

  echo 8 >/proc/sys/kernel/printk
způsobený nedostatkem virtuální adresové paměti

Ještě jednou: VmallocTotal neudává velikost virtuální paměti (ani adresního prostoru), jen velikost prostoru vyhrazeného pro alokaci přes vmalloc().

12.5.2014 08:51 Pinon | skóre: 7
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Zeptám se, znamená to, že vůj výpis /proc/meminfo
VmallocTotal:   114680 kB
VmallocUsed:     39248 kB
VmallocChunk:    37588 kB
a jeho položka VmallocUsed nemá maximální hodnotu 114680 kB? Je možné, že ta hodnota 39248 kB je již maximální možná hodnota?

Zjistil jsem, že problém je v přidávání nových chainů do iptables (vytvořených chainů je již několik tisíc). Při vytvoření nového chainu
/usr/sbin/iptables -t mangle -N nazev_noveho_chainu
se to tváří, že vše projde, ale chain neexistuje a do systémového logu se zapíše
kernel: allocation failed: out of vmalloc space - use vmalloc=<size> to increase size. 
Předpokládá, že chyba tedy bude v nedostatečné velikosti virtuálního adresního prostoru, který navýším přidáním patříčné informace do grubu. Bohužel přímo hw, který to dělá nemám u sebe, takže než se rozjedu to vyzkoušet, potřeboval bych od někoho potvrzení, jestli je má idea správná.
12.5.2014 10:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Zeptám se, znamená to, že vůj výpis /proc/meminfo a jeho položka VmallocUsed nemá maximální hodnotu 114680 kB?

Nic takového jsem netvrdil. Jen se vám snažím vysvětlit, že to není virtuální paměť ani celkový (virtuálně) adresovatelný prostor, ale jen jeho část určená pro alokace pomocí vmalloc().

kernel: allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.

Nemám teď čas to kontrolovat v kódu, ale jedno možné vysvětlení by bylo, že sice máte dost nevyužitého místa pro vmalloc(), ale ne dostatečně velký souvislý blok (to by mohla být hodnota VmallocChunk).

12.5.2014 13:00 iwk
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Ano, je to tak, chyba suvisly blok pamate, preto to nezbehne a konci chybou Taketo mnozstvo pravidiel ani nie je vhodne pridavat cez iptables. Urcite ti tie pravidla generuje nejaky skript, preto ho uprav tak, aby ti vygeneroval pravidla vo formate pre iptables-restore. Format je jednoduchy (vid vystup iptables-save). Ako bonus ziskat ovela rychlejsie nacitanie pravidiel.

12.5.2014 13:10 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Vytvořit tabulku celou najednou (ať už přes iptables-restore nebo přes iptables-batch) by pomoci mohlo - aspoň pokud tazatel nepotřebuje ta pravidla přidávat a odebírat dynamicky.
12.5.2014 14:05 Pinon | skóre: 7
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem
Je pravdou, že ta pravidla vygeneruje script do souboru, který se poté spouští. Kolega se iptables-save,restore snažil (něco mi dřív říkal) a měl s tím nějaký trabl, tuším, že iptables-save musel krmit po dávkách, nemohl to tam nasypat všechno, ale to už vařím z vody.
Po prvním vygenerování a zapsání všech pravidel se provádí pětiminutový sleep a poté se kontroluje, jestli došlo k nějaké změně a na základě toho se poté do iptables šahá a přidávajíse a ubírají chainy a pravidla.

Mám dvě otázky

1) kdybych script předělal pomoci iptables-save, iptables-restore, vyřešíto můj problém? Nenarazil bych na stejný problém a jediné zlepšení bude mnohem rychlejší zadávání pravidel?

2) mohu první načtení pravidel zadat přes iptables-save, ..restore a poté do iptables šahat pomocí utility iptables a opět přidávat a ubírat jednotlivé pravidla? Předpokládám, že se obě možnosti mohou kombinovat...
12.5.2014 16:35 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables: Memory allocation problem

Příkaz iptables-save jen vydumpuje aktuální konfiguraci na standardní výstup; iptables-restore pak obnoví konfiguraci z toho dumpu, který dostane na standardní vstup (ve stejném formátu). Ten dump je poměrně čitelný, takže se dá i editovat nebo vyrobit automatem. Vzhledem k tomu, jak fungují, oužívání po dávkách moc smysl nedává.

Pokud by konfigurace byla pevná, odpadne ta potřeba mít na chvíli v paměti dvě kompletní tabulky, což by mohlo pomoci. Ale jestli se s ní má pak ještě hýbat, tak to sice jde, ale jste tam, kde jste byl, protože i na přidání, změnu nebo odebrání jediného pravidla je potřeba provést to, co jsem popisoval.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.