apache - VYRIESENE

Dan Lukes dan at obluda.cz
Thu Apr 1 21:44:46 CEST 2004


Jozef Babjak wrote:

>>4) make deinstall apache (APACHA NEVYPINAT ON BEZI DALEJ, ASPON KED MATE 
>>FAST_CGI!)
> 
> 
>   ^-- No, on sice bezi, ale len do momentu, kym proces apaca nepotrebuje 
> operacny system odstrankovat'/odswapova't, co v pohode moze, lebo 
> spustitel'ny subor sluzi ako swapovy priestor pre odswapovanie pamate 
> kodu... V pripade, ze mu medzi tym make deinstall tento subor zmaze, tak 
> pri opa:tovnom nacitani procesu bude mat jadro pravdepodobne znacne 
> problemy (nakesovany ten subor nemoze byt', lebo keby bol nakesovany, tak 
> jadro uvolni pama:t' v prvom rade uvol'nenim kese, nie swapovanim). 
> 
> [Pre vysvetlenie: stranky obsahujuce v pama:ti kod procesu nie je potrebne 
> pri odswapovavani odkladat' do swapaku (t.j. na disk), pretoze uz na disku 
> raz su, v subore, odkial' sa proces spustil. Preto sa v tomto pripade 
> "odswapovanie" deje tak, ze sa stranky oznacia za odswapovane, ale nie v 
> na swap particii, ale v povodnom subore, odkial boli nacitane.]
> 
> I tak sa mi zda pravdepodobne, ze make deinstall pri spustenom apaci bud'
> zlyha (nemoze zmazat' subor httpd, pretoze jadro ho ma namapovany pre
> vyssie uvedeny pripad potreby odswapovania kodu procesu, a teda ho zmazat'
> vo vlastnom zaujme nedovoli), alebo make deinstall sa pokusi zmazat' subor 
> httpd a nepodari sa mu to, ale tuto chybu skryje/odignoruje, a tudiz 
> neprevedie deinstall. 

	Vyjimecne ponecham dopis (skoro) cely, protoze budu reagovat postupen 
na (skoro) vsechny odstavce.

	Zacnu od posledniho a mirne zesiroka. Na UFS (a mnohych dalsich 
UNIXovych filesystemech) existuji dve ruzne operace - "smazani jmena 
souboru" a "smazani souboru". V soucasnych verzich vetsiny systemu 
pritom ta druha funkce (smazani souboru) neni uzivateli VUBEC pristupna. 
Soubor jest smazan systemem automaticky tehdy, pokdu na nej neexistuje 
odkaz. Za odkaz se jednak povazuje "jmeno souboru" (kdyz ma soubor vice 
jmen, hovoriem o (hard-)lincich), jednak descriptor procesu drzici 
"otevreny" takovy soubor.

	Uzivateli jsou dostupne pouze funkce jako "remove (3)" respektive 
"unlink (2)". Soubor sam, pokud ma jeste jine jmeno - a nebo - a to je 
varianta, ktera nas ted zajima vice - je otevren nejakym procesem a 
pouzivan, ani pouzitim techto funkco nezanikne (vsimnete si, ze 
napriklad muzete klidne za behu Apache smazat jeho LOG soubor - ale 
misto na disku se uvolni teprve tehdy, kdyz beh Apache skonci - do te 
doby soubor existoval a Apache do nej stale zapisoval).

	To, co se rika v predposlednim odstavci je pravda, ale nikoli uplna. 
System, v okamziku, kdy soubor spusti, ho "otevre" - a po dobu behu 
prislusneho procesu ho nejen drzi otevreny, ale take zamknuty na zapis 
(zkuste pustit treba 'echo "" >jmeno_souboru' kdyz kod tohoto souboru 
zrovna "bezi" - dozvite se, ze "text file busy"). Takze zapis do TOHOTO 
souboru je vyloucen.

	Smazat jeho jmeno ale zakazano neni. Pokud jmeno souboru smazeme, 
soubor nezanikne - ale otevre se nam tim prostor pro vytvoreni noveho 
souboru, se stejnym jmenem, jake puvodne nosil ten puvodni.

	Upgradovat tedy bezici proces neni nemozne. Problem dokonce nenastava 
ani se soubeznym behem obou "verzi" tohoto souboru - je pravda, ze kdyz 
spoustim (novy) proces, ktery uz je v jedne instanci pritomen v pameti, 
tak se kod do pameti nenatahuje znovu, ale "shodnost" se nezjistuje 
porovnanim jmen souboru, ale "dev+inode" - a to je u noveho souboru 
urcite jine (vzhledem k tomu, ze puvodni soubor jeste nezanikl).

	Jasne, ze pri "in-place" uprade muze vzniknout problem - pokud se cely 
produkt sklada z vice souboru, ktere se pouzivaji "on-demand", pak se 
skutecne muze "stare" verzi stat, ze po provedeni upgrade otevre a 
pouzije obsah souboru nove verze - a to nemusi skoncit dobre. Nicmene, 
pokud se program takto nechova, problem by nastat nemel ...

	No, slo to napsat i jednou vetou - snazani souboru by popsane problemy 
skutecne prineslo, ale ani deninstall ani cokoliv jineho soubory nemaze 
- jen jejich jmena.

						Dan




More information about the Users-l mailing list