Portál AbcLinuxu, 8. května 2025 18:15

Dotaz: Vycerpani RAM pameti

8.2.2012 15:30 Martin Zavacky
Vycerpani RAM pameti
Přečteno: 463×
Odpovědět | Admin
Zdravim, potrebuju otestovat jak se muj program zachova pokud dojde volna operacni pamet. Mate nejake tipy na jednoduche a rychle totalni vycerpani RAM pameti?:) Nejlepe nejaky parradkovy bash skript.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.2.2012 15:53 l4m4
Rozbalit Rozbalit vše Re: Vycerpani RAM pameti
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:
Pokud chceš kontrolovaně alokovat a commitnout přesně definované množství paměti, tak asi není nad C...
rADOn avatar 8.2.2012 16:48 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Vycerpani RAM pameti
Ale fuj. Tohle IMHO moc dobře fungovat nebude – nejdřív to uswapuje mašinu na plech a pak vypustí z láhve OOM killera. Testovaný program to s velkou pravděpodobností přežije vyblokovaný v nějakém syscallu aniž by něco zaznamenal. Navíc pokud se se zbytkem systému vejde do 1MB bloku po kterých to jede, tak se nestane vůbec nic.

A i kdyby to fungovalo je to zbytečná práce, pokud chceš prostě vyplácat veškerou RAM, stačí pustit nějakou javu :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
8.2.2012 18:49 l4m4
Rozbalit Rozbalit vše Re: Vycerpani RAM pameti
Tak otázka je, čeho se snažíš dosáhnout. Nepředpokládál jsem, že tímhle necháš alokovat veškerou fyzikou paměť + swap, ale že jde o navození situace, kdy začne být s pamětí problém. Uvedený program ji vytvoří jednorázově, ale pak se nechá odswapovat, v méně mírumilovném scénáři by se na konci nechal běžet cyklus, který do paměti neustále zapisuje, takže se nenechá trvale uklidit do swapu -- asi jako ta java, ale kontrolovaně...
rADOn avatar 9.2.2012 13:56 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Vycerpani RAM pameti
Dotaz je na "pokud dojde volna operacni pamet", v takovém případě malloc() buď vrátí ENOMEM (což právě dělá ulimit) nebo program zablokuje dokud nezahodí nějaké volné stránky na swap. V tom případě program nic nepozná, takže není moc co na tom zkoušet (kromě toho že malloc bude trvat déle než obvykle). Čili vydrážděním úklidově čety správy paměti, (nebo nedejbože OOM zabijáka) ničeho nedosáhneš. Kromě toho může selhat alokace uvnitř kernelu na jiných voláních než malloc (semafory, buffery pro fifo etc.) ale to jsou afaik relativně malá množství takže je to spíš teoretická možnost. Všechny sdílené zdroje (sysv paměť, zámky, file handly…) mají limity podstatně níž než je dostupná paměť, takže je zase jednodušší udělat fail snížením daného limitu pro proces.

Prostě kernel má hodně hejblátek které slouží právě k tomu aby jeden proces nemohl škodit ostatním (ulimity, sysctl limity). A ty jsou právě proto mnohem jemnější a přesnější nástroj jak simulovat mezní situace, než dělat skutečné mezní situace házením mrtvého hovězího do paměti.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
rADOn avatar 8.2.2012 16:29 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Vycerpani RAM pameti
Odpovědět | | Sbalit | Link | Blokovat | Admin
ulimit umožňuje nastavit různé limity na proces a jeho potomky. Konkrétně
ulimit -v limit
nastaví limit na velikost virtuální paměti v kB, když se proces pokusí alokovat více, dostane ENOMEM. Existjí i specifické limity na velikost zásobníku, datového segmentu, neswapovatelnou paměť etc, seznam je v manstránce bashe. Vždy se podívej v jakých jednotkách se to počítá – různé limity mají různé jednotky (bajty, kB, 512B bloky).
"2^24 comments ought to be enough for anyone" -- CmdrTaco

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.