Apache'nin önceden çalışan ya da işçi olarak çalıştığını nasıl anlarım?


40

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?


2
veya daha fazla teknik olarak 'koşmak için derlendi'

Yanıtlar:


37

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.


4
Bu cevap yanlış. Cevabımı gör.
Chris Johnson

1
Hm, Ubuntu'da ne yaptığım ne işçi ne de prefork yok ...
mlissner 16:15

2
Ubuntu'da apache2ctl -Maktif modülleri listelemek için kullanabilirsiniz .
SteffenNielsen

53

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 -Vprefork 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:

  1. Yapılandırma dosyasını düzenleyin (örn /etc/sysconfig/httpd. CentOS / RedHat'ta)
  2. Bu satırı ekle veya aç: HTTPD=/usr/sbin/httpd.worker
  3. Apache'yi yeniden başlatın

Bu işlem kullanılarak hangi MPM'nin çalıştığı gösterilebilir:

  1. Apache'yi etkinleştir mod_info
  2. Mod_info url'sini sorgula, tipik olarak curl localhost/server-info
  3. "Sunucu Ayarları" bölümünde "MPM Adı: Çalışan" gösterilecektir
  4. httpd -VTekrar çalıştır - İşçiyi değil, yine de profork gösterecek

Alt çizgi:

  • httpd -V gerçekte kullanımda olan seçeneği değil, varsayılan seçeneği gösterir.

httpd -VApache'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.


Bilginize, httpd.apache.org/docs/trunk/mpm.html uyarınca , MPM tüm platformlarda statik bir modül olabilir veya bir DSO (Unix'te) olarak oluşturulabilir. Statik bir modül olarak kurulduğunda, "MPM'yi değiştirmek için sunucunun yeniden oluşturulması gerekir." Apache dokümantasyonu, MPM modülünün sunucuyu yeniden yapılanma dışında değiştirilemez hale getirmesi konusunda yanlış mı?
Steven T. Snyder,

Bu, etrafındaki daha yüksek seviyeli bir sargılı, kendine özgü bir şeye benziyor mu?
andol

2
CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event ve /usr/sbin/httpd.worker, derleme zamanında yapılandırılmış farklı MPM'lere sahip farklı ikili dosyalardır (sırasıyla prefork, olay ve işçi). / Etc / sysconfig / httpd içindeki HTTPD ayarını değiştirmek sadece hangi bininin init betiği tarafından çalıştırılacağını kontrol eder.
Paul Haldane

Ubuntu 16.04
LTS'de

41

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-availableiçin mods-enabledde /etc/apache2.

Bir seferde sadece bir tanesine izin verilir.


2
Bu kabul edilen cevap olmalı.

evet, harika cevap! basit ve gerekli olanı döndürür
Flash Thunder,

Benim için en iyisini yaptım, teşekkürler (Apache 2.4'te çalıştı ... .... apache 2.2'de işe yaramıyor gibi görünüyor)
dmikam

eventMPM 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.
Jonathan Berger,

7

RedHat ve türevlerinde, başlat topveya veya ps auxhttpd işlem adına bakın:

  • httpd Apache'nin prefork olarak çalıştığı anlamına gelir
  • httpd.worker işçi olarak çalıştığını gösterir

4

RHEL / 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.


Bu cevap yanlış. Cevabımı gör.
Chris Johnson

@ChrisJohnson, ilginç keşif ... Anladığım kadarıyla MPM'nin yapılandırma ile, sadece derleme ile değiştirilemeyeceği yönündeydi. OP’nin de aynısını düşündüğü görülüyor, çünkü sorusuna “ya da daha teknik olarak“ derlenerek ”derlendi” ile ilgili yorum yaptı. Cevabınızı tekrarlamaya çalışacağım ve bir kez onayladıktan sonra benimkini iptal edeceğim.
Steven T. Snyder

Httpd.apache.org/docs/trunk/mpm.html adresindeki apache dokümantasyonunda, MPM'lerin DSO modülleri olarak oluşturulabildiğini ve "Unix ve benzeri platformlarda", LoadModule yönergesi ile dinamik olarak yüklenebileceğini onayladım . Bu yüzden MPM, belirli koşullar altında (bugünlerde en yaygın yapılandırma olabilir ..) yükleme sırasında gerçekten değiştirilebilir.
Steven T. Snyder

4

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 .


Daha da
iyisi

3

İş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.


3

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/httpdkoşu görürsen , o zaman prefork kullanıyor.


2

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"

2

Bunu Debian'da dağıtımlar gibi çözmemin bir yolu ...

apachectl -V | grep -i mpm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.