ฉันจะบอกได้อย่างไรว่า Apache ใช้งาน (หรือกำหนดค่าให้ทำงาน) เป็น prefork หรือผู้ปฏิบัติงานหรือไม่
ฉันจะบอกได้อย่างไรว่า Apache ใช้งาน (หรือกำหนดค่าให้ทำงาน) เป็น prefork หรือผู้ปฏิบัติงานหรือไม่
คำตอบ:
MPM มีการกำหนดค่าในเวลารวบรวม วิธีหนึ่งในการคิดออกในภายหลังคือการรวบรวมรายการในโมดูล รายการนั้นจะรวมถึง MPM ที่เลือก รายการสามารถทำได้โดยใช้ apache ไบนารีด้วยแฟล็ก -l
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:~$
ที่นี่เราพบโมดุล module.c ดังนั้นฉันจึงรัน MPM ของผู้ปฏิบัติงาน
apache2ctl -Mเพื่อแสดงรายการโมดูลที่ใช้งานอยู่
คำตอบที่ได้รับจาก Series8217 และ Andol นั้นไม่ถูกต้อง
คำถามคือจะบอกได้อย่างไรว่า Apache กำลังใช้งาน prefork หรือผู้ปฏิบัติงานอยู่หรือไม่ คำแนะนำที่ให้โดยคำตอบอื่น ๆ จะบอกเพียงว่าMPM เริ่มต้นคืออะไร (ขึ้นอยู่กับโมดูลที่คอมไพล์แล้ว) ไม่ใช่ว่าจะใช้ตัวเลือกเริ่มต้นนั้นหรือตัวเลือกอื่นในเวลาปัจจุบัน
หากhttpd -Vแสดง prefork นั่นหมายความว่า prefork เป็น MPM เริ่มต้นที่คอมไพล์แล้ว สามารถแทนที่ได้โดยการเปลี่ยนการตั้งค่าไฟล์การกำหนดค่า Apache ดังที่แสดงในกระบวนการนี้:
/etc/sysconfig/httpdบน CentOS / RedHat)HTTPD=/usr/sbin/httpd.workerMPM ใดที่ทำงานจริงสามารถแสดงโดยใช้กระบวนการนี้:
curl localhost/server-infohttpd -Vอีกครั้ง - มันจะยังคงแสดง prefork ไม่ใช่ผู้ปฏิบัติงานบรรทัดล่างสุด:
httpd -V แสดงตัวเลือกเริ่มต้นไม่ใช่ตัวเลือกที่ใช้งานจริงมีคำตอบจากหลาย ๆ เว็บไซต์ที่บอกว่าใช้httpd -Vเพื่อบอกว่า Apache กำลังใช้งาน prefork หรือคนทำงานหรือไม่ พวกเขาผิดทั้งหมด ลองขั้นตอนข้างต้นเพื่อดูตัวคุณเอง
ใน Ubuntu 14.04
a2query -M
บอกeventว่าprefork,worker
คุณสามารถเปลี่ยนได้โดยการเพิ่มการเชื่อมโยงสัญลักษณ์สำหรับการmpm_<chosen>จากmods-availableไปในmods-enabled/etc/apache2
อนุญาตเพียงหนึ่งครั้งเท่านั้น
eventMPM เป็นไปตามเว็บไซต์ของ Apache "แตกต่างจากคน MPM โดยมีเป้าหมายของการบริโภคหัวข้อเพียงสำหรับการเชื่อมต่อกับการประมวลผลที่ใช้งาน"
ใน RedHat และ derivates เพียงแค่เปิดtopหรือps auxดูที่กระบวนการชื่อ httpd:
httpd หมายความว่า Apache กำลังทำงานเป็น preforkhttpd.worker หมายความว่ามันทำงานเป็นพนักงานบน RHEL / Fedora / etc httpd -Vวิ่ง คุณจะได้รับผลลัพธ์บางอย่างซึ่งรวมถึงต่อไปนี้:
Server version: Apache/2.2.21 (Unix)
...
Architecture: 64-bit
Server MPM: Prefork
...
ที่นี่ 'Server MPM' คือ 'Prefork' ดังนั้นเซิร์ฟเวอร์ของฉันกำลังเรียกใช้ prefork MPM
Chris Johnson ถูกต้อง ไปที่httpd.conf => เพิ่มบรรทัดนี้:
<Location /server-info>
SetHandler server-info
</Location>
รีสตาร์ท apache: /etc/init.d/httpd ทำการรีสตาร์ท จากนั้นการเข้าถึงlocalhost / เซิร์ฟเวอร์ข้อมูลเบราว์เซอร์ของคุณและดูที่ MPM ชื่อส่วน
นี่เป็นอีกวิธีที่ฉันคาดว่าน่าเชื่อถือในการพิจารณาว่า MPM ใดที่ใช้งานอยู่ เพิ่มสิ่งต่อไปนี้ในของคุณhttpd.conf:
<IfModule prefork.c>
Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
Header append X-MPM worker
</IfModule>
curl -I localhost | grep X-MPMจากนั้นตรวจสอบส่วนหัวใช้
บน centos (หรือ rhel) คุณสามารถเรียกใช้คำสั่งนี้:
ps -ef | grep httpd
หากคุณเห็นการ/usr/sbin/httpd.workerทำงานแสดงว่ากำลังใช้ MPM ของผู้ปฏิบัติงาน หากคุณเห็นการ/usr/sbin/httpdทำงานแสดงว่ากำลังใช้ prefork
คำตอบจาก Chris Johnson นั้นถูกต้อง
หลังจากเปิดใช้งานโมดูลข้อมูลตามที่ระบุไว้ในเอกสาร Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ) เอกสารฉบับนี้จะให้ MPM ที่คุณใช้:
links -dump http://localhost/server-info/?server | grep "MPM Name"
วิธีหนึ่งที่ฉันคิดใน Debian เหมือน distros คือโดยการทำงาน:
apachectl -V | grep -i mpm