Apache HTTP Sunucusu Sürüm 2.4
Açıklama: | Çok evreli ve çok süreçli melez bir HTTP sunucusu oluşturan çok süreçlilik modülü. |
---|---|
Durum: | MPM |
Modül Betimleyici: | mpm_worker_module |
Kaynak Dosyası: | worker.c |
Bu çok süreçlilik modülü (MPM) hem çok süreçli hem de çok evreli olabilen melez bir sunucu oluşturur. İstekleri sunmak için evreleri kullanması sebebiyle çok süreçli bir sunucudan daha az sistem kaynağı harcayarak daha çok isteğe hizmet sunabilir. Bununla birlikte, herbiri çok sayıda evreye sahip çok sayıda süreci canlı tutarak bir çok süreçli sunucu kadar kararlı olur.
Bu MPM’i denetim altında tutmakta kullanılan en önemli yönergeler, her
çocuk süreç için konuşlandırılacak evre sayısını belirleyen ThreadsPerChild
yönergesi ile devreye
sokulacak toplam evre sayısının azamisini belirleyen MaxRequestWorkers
yönergesidir.
Çocuk süreçleri devreye almaktan tek bir süreç (ana süreç) sorumludur.
Her çocuk süreç ThreadsPerChild
yönergesinde belirtilen sayıda evre
konuşlandırır. Bunlardan ayrı olarak, bir dinleyici evre bağlantıları
dinleyip gelenleri işlenmek üzere bu sunucu evrelerinden birine
aktarır.
Apache HTTP Sunucusu daima, gelen isteklere hizmet sunmaya hazır
yedek
veya boştaki sunucu evrelerinden oluşan bir havuzu canlı tutmaya
çalışır. Bu suretle, istemcilere isteklerinin sunulması için yeni çocuk
süreçlerin çatallanmasını, dolayısıyla yeni evrelerin
konuşlandırılmasını beklemek gerekmez. Başlangıçta çalıştırılacak çocuk
süreçlerin sayısı StartServers
yönergesinde belirtilir.
Apache httpd, çalışma süresi boyunca MinSpareThreads
ve MaxSpareThreads
yönergeleri ile belirtilen sınırlar
dahilinde kalmak üzere gerektiğinde süreçleri öldürerek gerektiğinde
yenilerini devreye alarak tüm süreçlerdeki toplam evre sayısını sabit
tutmaya çalışır. Bu işlem kendiliğinden çok iyi yürüdüğünden bu
yönergelere öntanımlı değerlerinden farklı değerlerin atanması nadiren
gerekli olur. Aynı anda hizmet sunulabilecek istemcilerin sayısı (yani,
tüm süreçlerin toplam evre sayısı) MaxRequestWorkers
yönergesi ile belirlenir. Etkin çocuk
süreçlerin sayısı ise MaxRequestWorkers
yönergesindeki değerin ThreadsPerChild
yönergesindeki değere
bölünmesi ile elde edilir.
Bu iki yönerge aynı anda etkin olabilecek çocuk süreçlerin ve her
çocuk süreçteki sunucu evreleri sayısının üst sınırını belirler ve bu
sınır sadece ana sunucu tamamen durdurulup yeniden başlatılarak
değiştirilebilir. ServerLimit
yönergesinin değeri etkin çocuk süreç
sayısının üst sınırı olup MaxRequestWorkers
yönergesindeki değerin ThreadsPerChild
yönergesindeki değere
bölünmesi ile elde değere eşit veya bundan küçük olması gerekir.
ThreadLimit
yönergesinin
değeri ise sunucu evreleri sayısının üst sınırını belirler ve ThreadsPerChild
yönergesindeki değerden
büyük veya ona eşit olması gerekir.
Sonlandırma sırasında etkin çocuk süreçlere ek olarak mevcut istemci
bağlantılarını işleme sokmaya çalışan tek bir sunucu evresinden başka
fazladan bir çocuk süreç etkin kalabileceği gibi sonlandırılacak süreç
sayısının en fazla MaxRequestWorkers
olması gerekirse de gerçekte sayı bundan
küçük olabilir. Şöyle bir işlemle tek bir çocuk sürecin sonlandırılması
iptal edilerek bu gibi durumlara karşı önlem alınabilir:
MaxConnectionsPerChild
yönergesinin değeri sıfır yapılır.MaxSpareThreads
ve
MaxRequestWorkers
yönergelerinin değerleri birbirine eşitlenir.worker
modülünün öntanımlı süreç-evre yapılandırması
genelde şöyledir:
ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
Unix altında 80. portu dinleyebilmek için ana sürecin root tarafından
çalıştırılmış olması gerekirse de çocuk süreçler ve evreler Apache
httpd tarafından daha az yetkili bir kullanıcının aidiyetinde
çalıştırılırlar. Apache httpd’nin çocuk süreçlerinin kullanıcı ve
gruplarını ayarlamak için User
ve Group
yönergeleri
kullanılır.
Çocuk süreçlerin sunacakları içeriği okumaya yetkili olmaları gerekir,
fakat bu yetkinin mümkün olduğunca kısıtlı tutulmasına çalışılmalıdır.
Bundan başka, suexec
kullanılmadığı takdirde, bu
yönergeler CGI betikleri tarafından miras alınacak yetkili kullanıcı
ve grubu da ayarlarlar.
MaxConnectionsPerChild
yönergesi ana sunucunun eski süreçleri öldürüp yenilerini oluşturmayı
ne kadar sıklıkla yapacağını denetler.
Bu MPM, gürleyen sürü sorunu ortaya çıktığında (genelde çok sayıda
dinlenen soket varlığında) gelen bağlantılara erişimi dizgileştirmek için
mpm-accept
muteksini kullanır. Bu muteksin gerçeklenimle
ilgili hususları Mutex
yönergesi ile
yapılandırılabilir. Bu muteks hakkında ek bilgi için başarımın arttırılması
belgesine bakınız.