>Legjobb tudomasom szerint az Apache ugy muxik, hogy csinal egy
>gyerek-folyamatot minden kereshez. Ezeknek a szamat a ThreadsPerChild
>direktivaval lehet beallitani. Erre pedig csak a hardver szab hatart
>(memoria + gyorsasag). Jol tevedek?
Nem csak a hardver, hanem az operációs rendszer is határt szab. Windows
NT-t például egy processzen belül alaphelyzetben csak 4096 szálat tudsz
elindítani default stack mérettel. Ennek tisztán szoftver az oka, 2GB a
címezhető virtuális memória, 512K nem kommittált virtuális memóriát allokál
az NT alaphelyzetben egy szálhoz stack méretnek, és a címzési terület ezzel
elfogy 4096 szál után. Ez nem a fizikai memória, és nem is a virtuális
memória.
A régebbi Apache nem szálakat indít, hanem processzeket. Az újat nem
ismerem. A processzek száma a Linux kernelben limitált, talán 256
alaphelyzetben. Növelni a kernel újrafordításával lehet (természetesen a
paraméter áteditálása után).
Az Apache alapkonfiguráció esetén maga is limitálja a processzek számát. Ez
azért kell, mert különben nagy terhelés alatt az újabb és újabb kapcsolatok
egyre több processzt indítanak el, ami végül a gép teljes leállásához
vezet. Ha minden Apache processz foglalt, akkor egy újabb bejövő kérést az
Apache 500 Internal Error kóddal kezel le. Ez nem vesz sok időt igénybe, és
így ezeket a plusz kapcsolatokat gyorsan lezárja.
Az nem tart fent processzt ha a kliensek lassúak, legalábbis normál méretű
oldalak esetén. Ilyenkor a kapcsolat megmarad, és a Linux szépen türelmesen
kiküldi az adatot a kliensnek, de már nincs a kimenő sockethez kötve a
processz szabadon kezelhet újabb kapcsolatot. Ezért fontos az, hogy a PHP
programok gyorsan lefussanak.
Lehet Apache-t úgy is üzemeltetni, hogy ne limitálja a processzek számát
maga az Apache, de nagyon oda kell figyelni.
Pontosabb tudásom nincs, mert az Apache konfigurálását nem magam végeztem
anno, hanem a kiváló rendszergazdák. (Nem gúnyolódás, tényleg szuper jó
srácok.)
Üdv.
Péter
|