Apache HTTP Sunucusu Sürüm 2.4

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.4 > Modüller

# Apache MPM worker

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

### Özet

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.

### Konular

- Nasıl çalışır?

### Yönergeler

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### Ayrıca bakınız:

- Apache HTTP Sunucusunun kullandığı adres ve portların ayarlanması

## Nasıl çalışır?

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