fork: Prostredek je docasne nepristupny

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Prosinec 17 21:28:42 CET 2000


On Fri, 15 Dec 2000, Michal Krause wrote:

> chtel jsem se zeptat, jestli nekdo nevi, co vsechno muze zpusobovat
> hlasku %subj% pri pokusu o spusteni cehokoliv. Stava se mi to na serveru
> a nemohu odhalit pricinu.

Budu predpokladat, ze pod $subj si mam predstavit chybu EAGAIN (prekladani
chybovych kodu do "prirozeneho jazyka" vede akorat k zamlzovani :P).

> Tipuji si na premnozenou MySQL s Apachem, protoze oba maji v tu chvili
> dost bezicich potomku/vlaken, ovsem dohromady to dava nejvyse tak 400
> procesu, coz by nemelo byt kriticke (nebo ano?).

Zalezi, co tam bezi dalsiho. Jak bylo zminovano, celkovy pocet procesu
v systemu je hodnota urcovana pri kompilaci jadra a ta je bezne neco jako
512.

> - bezproblemova odezva drive spustenych programu (treba Mutt, mc, ...)

Predpokladam, ze pod slovem "bezproblemovy" si predstavujete to, ze
funguji, pokud zrovna nepotrebuji fork().

> - normalni odezvy na ping

Ted mne napada, ze hypotezu s fragmentovanou pameti by bylo mozno overit
zasilanim ruzne velkych pingu. Kernel potrebuje nejmene jeden blok pameti
o X bajtech, aby prijal vsechny fragmenty IP datagramu velikosti X, slozil
je dohromady a mohl na nej nejak reagovat. Ale zda se mi to divne: kdyby
mel fork() malo pameti, zahlasil by spis ENOMEM nez EAGAIN.

> - po zabiti Apache a jeho opetovnem nahozeni zase vse jede bez problemu
>   treba nekolik dni

To je zajimava informace. Abyste postupoval vedecky, mel byste jeste
zkusit restartovat jine subsystemy, napr. MySQL. V kazdem pripade to
znamena, ze se to zadre na nejakem prostredku, na kterem sedi Apache a
ktery jeho restart v masovem meritku uvolni.

> Napadlo by nekoho, na co se jeste zamerit?

Use the Source: find /usr/src/linux -name '*.[ch]' | xargs grep EAGAIN
(Opravdu neni od veci si ten kod projit a popremyslet, co se muze dit
spatneho, co by vedlo k popisovanym symptomum. Od toho ty zdrojaky mate.)


On Sat, 16 Dec 2000, Milan Kopacka wrote:

> Nepotrebnych a prazdnych stranek je jiste dost. Problem je v tom, ze jsou
> vsechny jen velikosti 1kB (a spojit je nemuzete, protoze jsou treba ob
> jednu). A je treba souvisly kus pameti velikosti 2kB.

Ma-li neco velikost 1 kilo, pak to asi na hw, na kterem byva Linux bezne
provozovan, nebude tak uplne stranka. :)

(Mimochodem, ten velky blok pameti potrebny na proces obsahuje takove
veci, jako treba jaderny zasobnik, ktery pochopitelne musi byt vcelku.)


On Sat, 16 Dec 2000, Míla Kuchta wrote:

> No nevim, jestli tu muze byt rec o strankach, v pripade datovych
> struktur jadra. Prave v tom by mohl byt problem.

Jadro si casto alokuje cele stranky: bud z toho duvodu, ze se mu zrovna
vicemene cela stranka hodi, nebo ji alokuje slab allocator a rozreze ji na
mensi kousky (uniformni velikosti a uniformniho ucelu). Je to celkem dobry
pristup, uz jenom z toho duvodu, ze to silne zmensuje fragmentaci pameti.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux