Apache MPM performans ayarı

MPM dosyası işletim sistemine ve kurulu yönetim paneleine göre değişebilmekte birlikte örnek olarak Ubuntu 8.5 Plesk 12 kurulu sistemde /etc/apache2/mods-available dizini altında bulunmaktadır.

3 çeşit mpm vardır hangi mpm tipinin çalıştığını öğrenmek için aşağıdaki komutu çalıştırıyoruz, çıktı olarak php çalıştırıcısını verecektir.

a2query -M

Prefork, mod_php worker, mod_fcgid event, mod_fcgid + php-fpm gibi MPM türünden biri sizin sunucunuzdaki MPM çalıştırıcınız olabilir.

Hangi MPM türü çalışıyorsa onu düzenlememiz gerekiyor event tipindeki mpm için mpm_event.conf dosyasını düzenlememiz gerekiyor.

# StartServers: Açılışta çalıştırılacak sunucu işlem sayısı.
# MinSpareThreads: Boşta çalışacak minimim worker threads sayısıdır (en az bu sayı kadar bulundurulur).
# MaxSpareThreads: Boşta çalışacak maximum worker threads sayısıdır (fazlası kapatılır).
# ThreadsPerChild: Her bir sunucu i?lemi için çalıştırılan sabit worker threads sayısıdır.
# MaxRequestWorkers: max worker threads sayısıdır.
# MaxConnectionsPerChild: Her bir sunucu işlemi için yapılacak olan maximum istek sayısıdır (sonrasında işlem öldürülür yenisi başlatılır)

Şimdi örnek bir ayar dosyası yazalım ve açıklayalım

ServerLimit 10
StartServers 2
MaxClients 100
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 20

Bu ayarlara göre;
StartServers parametresi dikkate alınarak sunucu 2 adet child process oluşturacaktır.
Her process ThreadsPerChild parametresiyle 20 thread başlatır.
Sonuç olarak sunucu 2×20=40 client karşılayacak şekilde çalışmaya hazırdır.

Fazla kullanıcı gelirse ne olacak?
Diğer child processler bir 20 kişiye daha hizmet vermek için devreye girecekler.
Kaç adet child process oluşturulabileceğinin limitini ise ServerLimit parametresi kontrol eder.
ServerLimit parametresi 10 olduğundan totalde 10×20=200 eşzamanlı kullanıcı gelebilir.

Ama burada Maxclients parametresinin limitine takılıyoruz.
Maxclients parametresinin 100 olması demek (100/20=5 ten) her 5 child process’ten sonra daha fazla başlatılmaz demek.
Bu yüzden Serverlimit olarak belirlediğimiz 200 işlemi yaptırabilmek için her zaman
Serverlimit parametresi MaxClients/ThreadsPerChild olarak ayarlanmalıdır bu örnekte Serverlimit 200/20 = 10 olarak ayarlanmalıdır.

Bir cevap yazın