Khi apache tạo ra một quy trình cho mod-php, nó tồn tại bao lâu? Liệu quy trình có chết ngay khi phản hồi được gửi đi hay nó sẽ tồn tại cho đến khi trình duyệt nhận được phản hồi đầy đủ?
Khi apache tạo ra một quy trình cho mod-php, nó tồn tại bao lâu? Liệu quy trình có chết ngay khi phản hồi được gửi đi hay nó sẽ tồn tại cho đến khi trình duyệt nhận được phản hồi đầy đủ?
Câu trả lời:
Nếu bạn đang sử dụng mod-php, thì có khả năng bạn đang sử dụng prefork
MPM, sẽ sinh ra các tiến trình con để xử lý các yêu cầu. Số lượng và thời gian sống của những đứa trẻ này được điều chỉnh bởi các chỉ thị trong tệp chính apache2.conf
(hoặc httpd.conf
, tùy thuộc vào bản phân phối của bạn).
Tìm phần giống như thế này (giá trị của bạn có thể thay đổi):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Apache sinh ra StartServers
trẻ em tự động. Các quy trình này sẽ không hoạt động cho đến khi có yêu cầu. Nếu trẻ em bận rộn, nó sẽ sinh ra để MaxClients
trẻ xử lý tải, cố gắng duy trì MinSpareServers
trẻ nhàn rỗi để nhận yêu cầu mới. Một khi mọi thứ dịu xuống, những đứa trẻ nhàn rỗi sẽ bị giết chết cho đến khi đếm ngược MaxSpareServers
.
Các bit bạn hỏi về được xử lý bởi MaxRequestsPerChild
. Đặt ở mức 0, điều này có nghĩa là trẻ em có thể sống mãi mãi, đó là giá trị mặc định trong hầu hết các cài đặt apache. Đặt ở bất cứ điều gì khác, điều đó có nghĩa là mỗi tiến trình con sẽ bị giết và khởi động lại, bất kể tải hiện tại, một khi nó đã xử lý số lượng yêu cầu đó.
Thêm chi tiết về MPM prefork tại đây: http://httpd.apache.org/docs/2.2/mod/prefork.html
httpd không rẽ nhánh một quá trình cho mod_php. Nó tạo ra một quá trình cho chính nó, có mod_php được nhúng trong nó. Đứa trẻ sẽ sống cho đến khi nó hoàn thành MaxRequestsPerChild
yêu cầu. Bản thân mod_php sẽ tiếp tục xử lý từng yêu cầu đối với tập lệnh PHP cho đến khi tập lệnh thoát hoặc vượt quá giới hạn thời gian.