PHP-FPM (FastCGI Process Manager) là một module quản lý tiến trình dựa trên FastCGI cho máy chủ web ngôn ngữ PHP. Trong PHP-FPM, pm.max_children
là một tham số quan trọng quy định số lượng tiến trình con tối đa mà PHP-FPM có thể chạy cùng một lúc. Cấu hình và tối ưu pm.max_children
đúng cách là điều quan trọng để đảm bảo hiệu suất và ổn định của trang web. Trong bài viết này, chúng ta sẽ khám phá cách cấu hình và tối ưu pm.max_children
trong PHP-FPM cũng như cách khắc phục lỗi cảnh báo “server reached pm.max_children setting (5), consider raising it”.
Cách tối ưu hiệu suất pm.max_children và sửa lỗi PHP-FPM Linux/Ubuntu
![Cách cấu hình và tối ưu pm.max_children PHP-FPM [Linux] 9 Cách tối ưu hiệu suất pm.max_children và sửa lỗi PHP-FPM](https://itsmeit.co/wp-content/uploads/2023/07/cach-cau-hinh-va-toi-uu-pm-max-children-php-fpm.jpg)
Bước 1: Hiểu về tham số cấu hình pm.max_children
pm.max_children
là một tham số quan trọng trong cấu hình PHP-FPM, xác định số lượng tiến trình con tối đa mà PHP-FPM có thể chạy cùng một lúc. Điều này ảnh hưởng trực tiếp đến khả năng xử lý đồng thời của PHP-FPM và hiệu suất của trang web.- Quá ít tiến trình con có thể dẫn đến hiệu năng yếu và tăng thời gian phản hồi. Khi số lượng tiến trình con quá ít, PHP-FPM có thể không đủ để xử lý đồng thời tất cả các yêu cầu từ người dùng. Kết quả là trang web sẽ phản hồi chậm, thời gian tải trang kéo dài và người dùng có thể gặp phải lỗi timeout.
- Tuy nhiên, quá nhiều tiến trình con cũng có thể gây ra vấn đề về tài nguyên hệ thống. Mỗi tiến trình con sẽ sử dụng một lượng bộ nhớ và tài nguyên CPU. Nếu số lượng tiến trình con quá cao, tài nguyên hệ thống sẽ bị quá tải và gây suy giảm hiệu suất hoặc thậm chí làm máy chủ bị sập 503 (Service Unavailable).
- Vì vậy, để đạt được một sự cân bằng tốt giữa hiệu suất và tài nguyên hệ thống, chúng ta cần cấu hình và tối ưu
pm.max_children
sao cho phù hợp với lưu lượng truy cập và tài nguyên có sẵn trên máy chủ. Việc điều chỉnh giá trịpm.max_children
đúng cách là quan trọng để đảm bảo website hoạt động ổn định và hiệu quả.
Bước 2: Đánh giá lưu lượng truy cập và yêu cầu của trang web
Trước tiên chúng ta hãy xem cấu hình mặc định của php-fpm:
pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
Để cấu hình pm.max_children
một cách tối ưu, bạn cần đánh giá lưu lượng truy cập và yêu cầu của trang web của mình. Có một số yếu tố quan trọng để xem xét:
- Lưu lượng truy cập: Xác định số lượng người dùng truy cập trang web của bạn trong một khoảng thời gian nhất định. Bạn có thể sử dụng công cụ phân tích lưu lượng truy cập như Google Analytics để thu thập dữ liệu.
- Yêu cầu PHP: Đánh giá số lượng yêu cầu PHP mà trang web của bạn nhận được trong cùng một khoảng thời gian. Yêu cầu PHP bao gồm các yêu cầu để tải trang, xử lý dữ liệu và thực hiện các hoạt động khác trên máy chủ.
Bước 3: Tính toán và cấu hình để tối ưu pm.max_children
Sau khi thu thập thông tin trên, bạn cần xác định kích thước bộ nhớ trung bình mỗi tiến trình PHP-FPM. Có thể sử dụng lệnh sau để tính toán:
ps --no-headers -o "rss,cmd" -C php-fpm8.0 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
Lệnh này sẽ tính toán kích thước bộ nhớ trung bình mỗi tiến trình PHP-FPM dựa trên lượng bộ nhớ RSS (Resident Set Size) của từng tiến trình. (thay php-fpm8.0 bằng phiên bản php-fpm của bạn)
![Cách cấu hình và tối ưu pm.max_children PHP-FPM [Linux] 10 Tính toán và cấu hình để tối ưu pm.max_children](https://itsmeit.co/wp-content/uploads/2023/07/cach-cau-hinh-va-toi-uu-pm-max-children-php-fpm-1-1.png)
Tiếp theo, tính toán tổng bộ nhớ tiêu thụ của tất cả các tiến trình con dựa trên kích thước bộ nhớ trung bình và pm.max_children
.
Ví dụ: nếu kích thước bộ nhớ trung bình mỗi tiến trình là 156M (giống như ảnh chụp màn hình từ ItsmeIT) và giả sử server của bạn có 2GB RAM, và số RAM tối đa bạn muốn sử dụng tối ưu pm.max_children cho php-fpm là 1GB (1024MB), ta có:
pm.max_children = 1024MB / 156MB ≈ 6.5
Do pm.max_children phải là một số nguyên, bạn có thể làm tròn lên và đặt pm.max_children
thành 7.
pm.start_servers
, pm.min_spare_servers
, pm.max_spare_servers
: Những tham số này liên quan đến số lượng tiến trình được khởi động ban đầu và số lượng tiến trình dự phòng. Thông thường, bạn có thể thiết lập các giá trị sau:
- pm.start_servers: Có thể giữ nguyên giá trị 2.
- pm.min_spare_servers: Có thể giữ nguyên giá trị 1.
- pm.max_spare_servers: Có thể giữ nguyên giá trị 3.
- pm.max_requests: Đặt giá trị bằng 200 (có thể thay đổi tùy bạn). Khi đạt đến giới hạn nó sẽ tự động khởi động lại. Giúp giải phóng tài nguyên đảm bảo tính ổn định và hiệu suất của PHP-FPM.
Sau khi thực hiện các tính toán và điều chỉnh, cấu hình tối ưu pm.max_children PHP-FPM bây giờ sẽ trở thành:
pm = dynamic pm.max_children = 7 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 200
Cuối cùng, hãy đảm bảo rằng tổng bộ nhớ tiêu thụ không vượt quá dung lượng RAM có sẵn trên máy chủ. Kiểm tra tài nguyên hệ thống của máy chủ để đảm bảo rằng nó có đủ RAM để xử lý các tiến trình con và vẫn còn dư đủ cho các ứng dụng và dịch vụ khác như Nginx, Mysql… chạy trên máy chủ.
Từ những thông tin thu thập được và các tính toán trên, bạn có thể tiến hành cấu hình để tối ưu pm.max_children
một cách tối ưu để đáp ứng lưu lượng truy cập và yêu cầu của trang web mà không gây quá tải cho tài nguyên hệ thống. Qua đó giúp bạn khắc phục được lỗi server 503 “”server reached pm.max_children setting (5), consider raising it”.”
Một số chi tiết về các cấu hình phụ: pm.start_servers min/max_spare_servers
- pm.start_servers:
- Tham số
pm.start_servers
xác định số lượng tiến trình con được khởi động ban đầu khi PHP-FPM được bắt đầu hoặc khởi động lại. - Giá trị của pm.start_servers nên được đặt sao cho đủ để xử lý lượng yêu cầu ban đầu mà không gây chậm trễ đáng kể.
- Qua thời gian, pm.start_servers sẽ điều chỉnh tự động dựa trên mô hình quản lý tiến trình của PHP-FPM và yêu cầu thực tế.
- Thông thường, giá trị khởi đầu cho pm.start_servers nằm trong khoảng từ 2 đến 8, tùy thuộc vào khối lượng yêu cầu và khả năng xử lý của máy chủ.
- Tham số
- pm.min_spare_servers:
pm.min_spare_servers
xác định số lượng tiến trình con tối thiểu mà PHP-FPM duy trì trong khi đang chạy.- Giá trị của pm.min_spare_servers đảm bảo rằng PHP-FPM luôn có đủ tiến trình con sẵn sàng để xử lý các yêu cầu.
- Đặt giá trị
pm.min_spare_servers
thấp hơn có thể dẫn đến việc tạo mới các tiến trình con khi cần thiết, làm tăng thời gian phản hồi. - Tuy nhiên, đặt giá trị
pm.min_spare_servers
quá cao sẽ dẫn đến lãng phí tài nguyên hệ thống. - Thông thường, giá trị khởi đầu cho pm.min_spare_servers nằm trong khoảng từ 1 đến 5, và có thể điều chỉnh dựa trên yêu cầu và tài nguyên của máy chủ.
- pm.max_spare_servers:
pm.max_spare_servers
xác định số lượng tiến trình con tối đa mà PHP-FPM duy trì trong khi đang chạy.- Giá trị của
pm.max_spare_servers
giới hạn số lượng tiến trình con tối đa để tránh lãng phí tài nguyên hệ thống. - Nếu số lượng tiến trình con vượt quá pm.max_spare_servers, PHP-FPM sẽ tiến hành giảm số lượng tiến trình con để giải phóng tài nguyên.
- Đặt giá trị
pm.max_spare_servers
quá thấp có thể dẫn đến việc tạo mới tiến trình con quá thường xuyên, gây tốn tài nguyên CPU và bộ nhớ. - Thông thường, giá trị khởi đầu cho pm.max_spare_servers nằm trong khoảng từ 3 đến 10, và có thể điều chỉnh dựa trên yêu cầu và tài nguyên của máy chủ.
Các giá trị cho pm.start_servers, pm.min_spare_servers, và pm.max_spare_servers nên được điều chỉnh cẩn thận để đảm bảo có đủ tiến trình con sẵn sàng để xử lý yêu cầu, tránh việc lãng phí tài nguyên và đảm bảo hiệu suất tốt của PHP-FPM.
Cấu hình và tối ưu pm.max_children
trong PHP-FPM là một bước quan trọng để đảm bảo hiệu suất và ổn định của trang web. Việc xác định giá trị phù hợp cho pm.max_children
dựa trên lưu lượng truy cập và tài nguyên hệ thống là cần thiết. Theo dõi hiệu suất, sử dụng công cụ giám sát và log, cùng với việc điều chỉnh các tham số khác, sẽ giúp bạn tối ưu hóa hiệu suất của PHP-FPM và đảm bảo trang web hoạt động tốt trên môi trường sản xuất.
– Advertising –