Làm thế nào để tôi biết nếu apache đang chạy (hoặc được cấu hình để chạy) là prefork hoặc worker?
Làm thế nào để tôi biết nếu apache đang chạy (hoặc được cấu hình để chạy) là prefork hoặc worker?
Câu trả lời:
MPM được cấu hình tại thời gian biên dịch. Một cách để tìm ra nó sau đó là liệt kê được biên dịch theo các mô-đun. Danh sách đó sẽ bao gồm MPM được chọn. Danh sách có thể được thực hiện khi chạy nhị phân apache, với cờ -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:~$
Ở đây chúng tôi tìm thấy module worker.c, do đó tôi đang chạy MPM worker.
apache2ctl -Mđể liệt kê các mô-đun hoạt động.
Các câu trả lời được đưa ra bởi Series8217 và Andol đều không chính xác.
Câu hỏi là, làm thế nào để biết Apache đang chạy prefork hay worker. Lời khuyên được đưa ra bởi các câu trả lời khác chỉ cho biết MPM mặc định là gì (dựa trên các mô-đun được biên dịch), chứ không phải nếu mặc định đó hoặc lựa chọn khác đang được sử dụng tại thời điểm hiện tại.
Nếu httpd -Vhiển thị prefork, điều đó chỉ có nghĩa là prefork là MPM mặc định được biên dịch. Điều đó có thể được ghi đè bằng cách thay đổi cài đặt tệp cấu hình Apache, như được hiển thị trong quy trình này:
/etc/sysconfig/httpdtrên CentOS / RedHat)HTTPD=/usr/sbin/httpd.workerMPM nào đang thực sự chạy có thể được hiển thị bằng quy trình này:
curl localhost/server-infohttpd -Vlại - nó vẫn sẽ hiển thị prefork, không phải workerDòng dưới cùng:
httpd -V hiển thị tùy chọn mặc định, không phải tùy chọn nào thực sự được sử dụngCó nhiều câu trả lời trên nhiều trang web cho biết, sử dụng httpd -Vđể cho biết Apache đang chạy prefork hay worker. Họ đều sai. Hãy thử các thủ tục trên để xem cho chính mình.
Trong Ubuntu 14.04
a2query -M
Nói eventrằng prefork,worker
Bạn có thể thay đổi nó bằng cách thêm các liên kết tượng trưng cho mpm_<chosen>từ trong mods-availableđến .mods-enabled/etc/apache2
Chỉ có một được phép trong một thời gian.
eventMPM là, theo trang web của Apache "một biến thể của MPM công nhân với mục tiêu tiêu thụ chủ đề duy nhất cho các kết nối với chế biến tích cực".
Trên RedHat và các dẫn xuất, chỉ cần khởi chạy tophoặc ps auxxem tên quy trình httpd:
httpd có nghĩa là Apache đang chạy như preforkhttpd.worker có nghĩa là nó đang chạy như công nhânTrên RHEL / Fedora / vv, hãy chạy httpd -V. Bạn sẽ nhận được một số đầu ra bao gồm:
Server version: Apache/2.2.21 (Unix)
...
Architecture: 64-bit
Server MPM: Prefork
...
Ở đây 'Máy chủ MPM' là 'Prefork', vì vậy máy chủ của tôi đang chạy MPM prefork.
Chris Johnson là chính xác. Tới httpd.conf => thêm dòng này:
<Location /server-info>
SetHandler server-info
</Location>
Khởi động lại apache: /etc/init.d/httpd khởi động lại. Sau đó truy cập localhost / thông tin máy chủ bằng trình duyệt của bạn và xem phần Tên MPM .
Đây là một phương pháp khác mà tôi mong đợi sẽ đáng tin cậy trong việc xác định MPM nào đang được sử dụng. Thêm phần sau vào httpd.conf:
<IfModule prefork.c>
Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
Header append X-MPM worker
</IfModule>
Sau đó kiểm tra các tiêu đề bằng cách sử dụng curl -I localhost | grep X-MPM.
trên centos (hoặc rhel) bạn có thể chạy lệnh này:
ps -ef | grep httpd
nếu bạn thấy /usr/sbin/httpd.workerchạy, thì nó đang sử dụng MPM worker. nếu bạn thấy /usr/sbin/httpdchạy, thì nó đang sử dụng prefork
Câu trả lời từ Chris Johnson là đúng.
Sau khi kích hoạt mô-đun thông tin, như được ghi lại trong Tài liệu Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), lớp lót này sẽ cung cấp cho bạn MPM bạn đang sử dụng:
links -dump http://localhost/server-info/?server | grep "MPM Name"