fork: Prostredek je docasne nepristupny

Michal Krause michal na krause.cz
Pondělí Prosinec 18 11:35:31 CET 2000


On 17/12/2000, Pavel Kankovsky 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).

Ja vim, ale bohuzel se mi nepovedlo presvedcit bash, aby nemluvil cesky
(protoze to je hlaska od bashe a jak znamo, na bezici program
prenastaveni LC_* uz neplati) a primo navratovy kod fork()u nevim,
protoze o nem vsichni cudne mlci a ja jsem zrovna nemel pri ruce nejaky
program, ktery by mi rekl, oc bezi (a hlavne bych ho nespustil :)

> > 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.

Hm, priznam se, ze by me v zivote nenapadlo, ze per-system limit na
pocet procesu bude takhle nizky. Nejspis to bude opravdu v nem, protoze
jak Apache, tak MySQL maji stejny limit - 256 konexi, takze pokud se to
zrovna blbe sejde, staci uz jenom tihle dva na to, aby bylo limitu
dosazeno (a ostatnich procesu take par bezi). Ted je otazka, co zpusobi
ten naval.

> > - bezproblemova odezva drive spustenych programu (treba Mutt, mc, ...)
> 
> Predpokladam, ze pod slovem "bezproblemovy" si predstavujete to, ze
> funguji, pokud zrovna nepotrebuji fork().

Tak tak...

> > - 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.

Muzu to testnout, ale jak rikam, spis to bude tim limitem, protoze kdyz
jsem jednou zabil Apache, podarilo se mi jeste spocitat vlakna MySQL (nez
pochcipaly) a bylo to kolem 220. Apachu musi byt logicky prizblizne take
tolik, protoze drtiva vetsina konexi na MySQL jde z webu.

> > - 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.

Zkusim si s tim hrat, ale pricinu bude mozna treba hledat v tom, kde se
vezme tolik konexi zvenci.

S pozdravem
-- 
Michal Krause                                                       /\
ICQ: 7665279            Informace (nejenom) ze sveta Linuxu      /\/  \
email: michal na krause.cz _______ http://www.root.cz/ _______ NAVRCHOLU.cz

                           Penguino  veritas


Další informace o konferenci Linux