Apache'nin prefork veya işçi olarak çalışıp çalışmadığını (veya çalışacak şekilde yapılandırılmış olduğunu) nasıl anlarım?
Apache'nin prefork veya işçi olarak çalışıp çalışmadığını (veya çalışacak şekilde yapılandırılmış olduğunu) nasıl anlarım?
Yanıtlar:
MPM derleme zamanında yapılandırılmıştır. Bunu daha sonra anlamanın bir yolu, modüllerde derlenmiş olanları listelemektir. Bu liste seçilen MPM'yi içerecektir. Giriş, -l bayrağıyla apache binary çalıştırılarak gerçekleştirilebilir.
andreas@halleck:~$ apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
andreas@halleck:~$
Burada worker.c modülünü buluruz, bu yüzden işçi MPM'sini çalıştırıyorum.
apache2ctl -M
aktif modülleri listelemek için kullanabilirsiniz .
Series8217 ve Andol tarafından verilen cevapların ikisi de yanlıştır.
Asıl soru, Apache'nin önceden çalışan ya da işçi çalıştırıp çalıştırmadığını anlatmaktı . Diğer cevaplar tarafından verilen tavsiyeler, varsayılan MPM'nin ne olduğunu (derlenmiş modüllere dayanarak) şu anda varsayılan veya başka bir seçenek kullanılmıyorsa söyler.
Eğer httpd -V
prefork gösterirse, bu sadece prefork'un derlenmiş varsayılan MPM olduğu anlamına gelir. Bu işlemde gösterildiği gibi bir Apache yapılandırma dosyası ayarını değiştirerek geçersiz kılınabilir:
/etc/sysconfig/httpd
. CentOS / RedHat'ta)HTTPD=/usr/sbin/httpd.worker
Bu işlem kullanılarak hangi MPM'nin çalıştığı gösterilebilir:
curl localhost/server-info
httpd -V
Tekrar çalıştır - İşçiyi değil, yine de profork gösterecekAlt çizgi:
httpd -V
gerçekte kullanımda olan seçeneği değil, varsayılan seçeneği gösterir.httpd -V
Apache'nin önceden çalışan mı yoksa çalışan mı olduğunu söylemek için kullandıkları birçok web sitesinde cevaplar var . Hepsi yanlış. Kendiniz görmek için yukarıdaki prosedürü deneyin.
Ubuntu'da 14.04
a2query -M
Söyler event
, prefork
,worker
Aşağıdakiler için sembolik bağlantılar ekleyerek bunu değiştirebilirsiniz mpm_<chosen>
gelen mods-available
için mods-enabled
de /etc/apache2
.
Bir seferde sadece bir tanesine izin verilir.
event
MPM Apache sitesinde, "sadece aktif işlenmesiyle bağlantıları için konuları tüketen amacı ile işçi MPM bir varyantı" göre vardır.
RedHat ve türevlerinde, başlat top
veya veya ps aux
httpd işlem adına bakın:
httpd
Apache'nin prefork olarak çalıştığı anlamına gelirhttpd.worker
işçi olarak çalıştığını gösterirRHEL / Fedora / etc'de çalıştırın httpd -V
. Aşağıdakileri içeren bir çıktı alacaksınız:
Server version: Apache/2.2.21 (Unix)
...
Architecture: 64-bit
Server MPM: Prefork
...
Burada 'Server MPM' 'Prefork' olduğu için sunucum prefork MPM'i çalıştırıyor.
Chris Johnson haklı. Git httpd.conf bu satırı ekleyin =>:
<Location /server-info>
SetHandler server-info
</Location>
Apache'yi yeniden başlatın: /etc/init.d/httpd restart. Ardından , tarayıcınızdan localhost / server-info bilgisine erişin ve MPM Adı bölümüne bakın .
İşte hangi MPM'nin kullanımda olduğunu belirlemede güvenilir olmasını beklediğim bir başka yöntem. Aşağıdakileri bilgisayarınıza ekleyin httpd.conf
:
<IfModule prefork.c>
Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
Header append X-MPM worker
</IfModule>
Sonra kullanarak başlıkları kontrol edin curl -I localhost | grep X-MPM
.
centos'ta (veya rhel) şu komutu çalıştırabilirsiniz:
ps -ef | grep httpd
Sıralanan eğer /usr/sbin/httpd.worker
çalışıyorsa, o zaman işçi MPM kullanıyor. Eğer /usr/sbin/httpd
koşu görürsen , o zaman prefork kullanıyor.
Chris Johnson'ın cevabı haklı.
Bilgi modülünü Apache Dokümantasyonunda ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ) belirtildiği gibi etkinleştirdikten sonra , bu astar size kullandığınız MPM’yi verecektir:
links -dump http://localhost/server-info/?server | grep "MPM Name"