Hlavní navigace

Chyba v mod_czech

Petr Tesařík 23. 4. 1998

Také na svém WWW serveru používáte Apache a mod_czech? A občas se Vám stane, že některý proces zůstane "viset" a přitom výrazně zatěžuje CPU? Přišli jsme na to, kde je chyba.

Na našem serveru provozujeme kombinaci Apache + mod_czech pro dynamické kódování češtiny na našich stránkách. Po chvíli provozu ovšem tu a tam některý Apache zůstal v nekonečné smyčce, přičemž vytvářel nezanedbatelnou zátěž procesoru. Zřejmě nejsme jediní, protože o podobných problémech mluvili i provozovatelé jiných serverů.

Jak se zdá, na vině je mod_czech. Po krátkém zkoumání jsem odhalil i chybu. Je ve funkci mysockwrite, která nepočítá s případem uzavření spojení. Jak jsem se díval na zdrojové texty mod_czech verze 3.0.0, tam už patrně chyba není (ale nezkoušel jsem to), nicméně 3.0.0 je stále ještě v alpha verzi, takže pro ty, kdo provozují verzi 2.x.x nabízím tento patch: (není to žádná ukázka čistého programování, ale svůj účel splňuje)

--- mod_czech.c.old Thu Apr 23 09:23:16 1998
+++ mod_czech.c Thu Apr 23 09:25:40 1998
@@ -555,12 +555,23 @@
while(tosend) {
     if(r->connection->aborted) return(-1);
     n = bwrite(r->connection->client, &buf[i], tosend);
+    if(n <= 0)
+        break;
+    reset_timeout(r); /* reset timeout after successful write */
     i += n;
     tosend -= n;
#ifdef DEBUGBUG
     if(tosend) LogMess("Bwrite - Writing %d getting %d",tosend, n);
#endif
}
+
+ /* Tohle je hack!!! Melo by se vracet i a volajici funkce by mely pocitat
+  * s tim, ze je mensi nez num (coz se IMHO nedeje).
+  *  (Petr Tesarik, 21.4.1998)
+  */
+ if(i<num)
+   return(-1);
+
return(num);
}
/* -------------- ChangeTag -------------- */

Myslím si, že je to o něco lepší, než průběžně „ubíjet“ Apache, jak jsem to viděl na jednom nejmenovaném serveru.

Petr Tesařík

Našli jste v článku chybu?
DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Na koho se v Křišťálové Lupě nedostalo?

Na koho se v Křišťálové Lupě nedostalo?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

DigiZone.cz: Milan Kruml: procházka TV historií

Milan Kruml: procházka TV historií

DigiZone.cz: Digi CZ výrazně zlevnila balíček HBO

Digi CZ výrazně zlevnila balíček HBO

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Berňák kvůli EET prodlužuje otevírací dobu

Berňák kvůli EET prodlužuje otevírací dobu

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

DigiZone.cz: HD programy ČT i v UPC Horizon

HD programy ČT i v UPC Horizon

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: Na 3. prosince se chystá protest proti EET

Na 3. prosince se chystá protest proti EET

Měšec.cz: Golfové pojištění: kde si jej můžete sjednat?

Golfové pojištění: kde si jej můžete sjednat?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Měšec.cz: Vklad na cizí účet je draze zpoplatněn (přehled)

Vklad na cizí účet je draze zpoplatněn (přehled)