Làm thế nào để tôi biết nếu apache đang chạy như prefork hoặc worker?


40

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?


2
hoặc kỹ thuật hơn 'được biên dịch để chạy như'

Câu trả lời:


37

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.


4
Câu trả lời này là sai. Xem câu trả lời của tôi.
Chris Johnson

1
Hừm, trên Ubuntu tôi không có công nhân hay prefork nào được liệt kê khi tôi làm điều này ...
mlissner

2
Trên Ubuntu, bạn có thể sử dụng apache2ctl -Mđể liệt kê các mô-đun hoạt động.
SteffenNielsen

53

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:

  1. Chỉnh sửa tệp cấu hình (ví dụ: /etc/sysconfig/httpdtrên CentOS / RedHat)
  2. Thêm hoặc bỏ ghi chú dòng này: HTTPD=/usr/sbin/httpd.worker
  3. Khởi động lại Apache

MPM nào đang thực sự chạy có thể được hiển thị bằng quy trình này:

  1. Kích hoạt mod_info Apache
  2. Truy vấn url mod_info, thường curl localhost/server-info
  3. Phần "Cài đặt máy chủ" sẽ hiển thị "Tên MPM: Công nhân"
  4. Chạy httpd -Vlại - nó vẫn sẽ hiển thị prefork, không phải worker

Dò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ụng

Có 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.


FYI, theo httpd.apache.org/docs/trunk/mpm.html MPM có thể là một mô-đun tĩnh trên tất cả các nền tảng hoặc được xây dựng dưới dạng DSO (trên Unix). Khi nó được xây dựng dưới dạng một mô-đun tĩnh, "Máy chủ phải được xây dựng lại để thay đổi MPM." Là tài liệu apache không chính xác về MPM mô-đun tĩnh không thể thay đổi ngoại trừ bằng cách xây dựng lại máy chủ?
Steven T. Snyder

Điều này nghe có vẻ giống như một cái gì đó phân phối cụ thể, với một trình bao bọc cấp cao hơn xung quanh?
andol

2
Trên CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event và /usr/sbin/httpd.worker đều là các nhị phân riêng biệt với MPM khác nhau được định cấu hình tại thời gian biên dịch (lần lượt là prefork, event và worker). Thay đổi cài đặt HTTPD trong / etc / sysconfig / httpd chỉ kiểm soát nhị phân nào được chạy bởi tập lệnh init.
Paul Haldane

Tôi đã phải chạy apache2 -V thay vì httpd -V trên Ubuntu 16.04 LTS
cnizzardini

41

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.


2
Điều này cần phải là câu trả lời được chấp nhận.

Vâng, câu trả lời tuyệt vời! đơn giản và trả lại những gì cần thiết
Flash Thunder

Làm việc cho tôi tốt nhất, cảm ơn (làm việc trên apache 2.4 .... có vẻ như nó không hoạt động trên apache 2.2)
dmikam

Các 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".
Jonathan Berger

7

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ư prefork
  • httpd.worker có nghĩa là nó đang chạy như công nhân

4

Trê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.


Câu trả lời này là sai. Xem câu trả lời của tôi.
Chris Johnson

@ChrisJohnson, khám phá thú vị ... Tôi hiểu rằng MPM không thể thay đổi theo cấu hình, chỉ bằng cách biên dịch. Có vẻ như OP cũng nghĩ như vậy, vì anh ấy đã nhận xét về câu hỏi của mình với "hoặc kỹ thuật hơn 'được biên dịch để chạy như'". Tôi sẽ xem xét lại câu trả lời của bạn và một khi tôi đã xác nhận nó tôi sẽ thu hồi câu trả lời của tôi.
Steven T. Snyder

Tôi đã xác nhận thông qua tài liệu apache tại httpd.apache.org/docs/trunk/mpm.html rằng MPM có thể được xây dựng dưới dạng mô-đun DSO và được tải động bằng chỉ thị LoadModule, trên "Unix và các nền tảng tương tự". Vì vậy, MPM thực sự có thể được thay đổi tại thời điểm tải trong một số trường hợp nhất định (có thể là cấu hình phổ biến nhất hiện nay ..)
Steven T. Snyder

4

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 .


Thậm chí còn đẹp hơn, hãy đặt nó giữa <IfModule info_module> </ IfModule>
Lexib0y

3

Đâ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.


3

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


2

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"

2

Một cách mà tôi tìm ra nó trong Debian như các bản phân phối, là bằng cách chạy:

apachectl -V | grep -i mpm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.