Tối ưu PHP-FPM Fast Process Manager
PHP-FPM (hoặc Fast Process Manager) cung cấp một số lợi thế so với mod_php, trong đó có hai ưu điểm đáng chú ý nhất là nó linh hoạt hơn trong việc cấu hình và hiện là chế độ chạy PHP ưa thích của nhiều người trong cộng đồng. cài đặt cấu hình mặc định của trình quản lý gói của bạn thì có thể bạn sẽ không tận dụng được tối đa lợi ích của nó.
Trong bài đăng này, mình sẽ cung cấp một cái nhìn tổng quan ngắn gọn về cách cải thiện hiệu suất của PHP-FPM, bằng cách thảo luận về ba loại trình quản lý quy trình của PHP-FPM và loại nào phù hợp nhất để sử dụng trong trường hợp nào.
Trong cấu hình của php-fpm
, pm
là một tùy chọn để xác định cách php-fpm quản lý các worker processes.
pm = static
số lượng worker processes được xác định bởi pm.max_children
sẽ được duy trì cố định và không thay đổi dựa trên tải hệ thống hoặc yêu cầu.
Với cấu hình
pm = static
pm.max_children = 5
Trong ví dụ này, php-fpm sẽ luôn giữ chính xác 5 worker processes. Điều này có thể hữu ích trong môi trường ổn định với lưu lượng yêu cầu ổn định, giúp tránh overhead của việc thay đổi động về số lượng processes.
pm = ondemand
nghĩa là php-fpm sẽ chỉ khởi động worker process khi có yêu cầu và sau đó giữ chúng sống cho một khoảng thời gian (pm.process_idle_timeout
) trước khi chấm dứt chúng nếu không có yêu cầu nào được nhận. Các tham số khác như pm.max_children
cũng có thể được cấu hình để xác định số lượng processes tối đa có thể tồn tại.
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
Trong ví dụ này, php-fpm sẽ duy trì tối đa 5 worker processes. Khi có yêu cầu, nó sẽ khởi động các processes cần thiết để xử lý yêu cầu, và sau khi không có yêu cầu nào trong khoảng thời gian 10 giây (pm.process_idle_timeout
), các processes không cần thiết sẽ bị chấm dứt để giảm tải hệ thống.
Lựa chọn pm = ondemand
thường hữu ích trong môi trường có biến động lớn về lưu lượng yêu cầu và giúp tiết kiệm tài nguyên bằng cách chỉ triển khai worker processes khi cần thiết.
pm = dynamic
nghĩa là php-fpm có thể tăng hoặc giảm số lượng worker processes tùy thuộc vào tải hệ thống và cấu hình. Các tham số như pm.max_children
, pm.start_servers
, pm.min_spare_servers
, và pm.max_spare_servers
được sử dụng để điều chỉnh hành vi của dynamic process manager.
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
Trong ví dụ này:
pm.max_children
là số lượng worker processes tối đa mà php-fpm có thể triển khai.pm.start_servers
là số lượng worker processes được khởi động ngay từ khi php-fpm bắt đầu.pm.min_spare_servers
là số lượng worker processes tối thiểu được giữ luôn hoạt động.pm.max_spare_servers
là số lượng worker processes tối đa mà php-fpm giữ sẵn có để xử lý yêu cầu.
Lựa chọn pm = dynamic
thường hữu ích trong môi trường có biến động về lưu lượng yêu cầu, giúp tối ưu hóa sử dụng tài nguyên bằng cách linh hoạt thích ứng với tải hệ thống.
Tới đây mình có thể làm 1 bảng so sánh
Thuộc tính | pm = static |
pm = dynamic |
pm = ondemand |
---|---|---|---|
Quản lý Worker Processes | Số lượng processes cố định (pm.max_children ) |
Số lượng processes biến động | Số lượng processes biến động, chấm dứt khi không hoạt động |
Tăng giảm dựa trên tải | Không | Có | Có |
Overhead khi tải thấp | Cao (tổng số processes luôn chạy) | Thấp (số processes thích ứng với tải) | Thấp (số processes thích ứng với yêu cầu) |
Phù hợp cho môi trường | Lưu lượng ổn định, ít biến động | Biến động lớn về lưu lượng yêu cầu | Biến động lớn, yêu cầu thấp đến trung bình |
Cấu hình ví dụ |
|
|
|
Lưu ý rằng sự lựa chọn giữa các loại pm
phụ thuộc vào đặc điểm cụ thể của ứng dụng và môi trường triển khai. Một số ứng dụng có thể hưởng lợi từ sự ổn định của pm = static
, trong khi những ứng dụng có biến động lớn về lưu lượng yêu cầu có thể tận dụng tốt từ pm = dynamic
hoặc pm = ondemand
.
Tối ưu pm = dynamic
Hầu hết các script, hay panel đều lựa chọn sử dụng pm = dynamic vì những lợi ích mà nó mang lại, nhưng qua tham khảo các script, panel khác cũng như các bài posts chia sẻ nước ngoài mình thấy việc cấu hình các thông số pm.max_children
, pm.start_servers
, pm.min_spare_servers
, và pm.max_spare_servers
đều khó có thể áp dụng đại trà mà tùy vào, độ ì ạch của code, mục đích sử dụng website, mục đích sử dụng bộ nhớ khác nhau, dựa theo tình hình thực tế lượng truy cập mà điều chỉnh con số này sao cho vừa đủ là tối ưu. Vì thông thường máy chủ không chỉ mỗi php-fpm mà còn nginx, redis, mysql,... nữa.
Bạn có thể tham khảo 1 vài cách setup dưới đây
Tối ưu theo hocvps.com
Cấu hìn RAM ít | Cấu hình RAM nhiều | |
pm.max_children |
Dòng cuối cùng Chia cho 30 bạn có thể thay đổi tương ứng với độ ì ạch của code, có thể lấy thông số này từ debugbar (Laravel), WordPress thì có thể tìm plugin keyword memory usage |
|
pm.start_servers | 4 | 8 |
pm.min_spare_servers | 2 | CPU Core x 2 |
pm.max_spare_servers | 6 | CPU Core x 4 |
pm.max_requests | 500 | 1000 |
Tối ưu theo pmcalculator
Github: https://github.com/spot13/pmcalculator
Demo: https://spot13.com/pmcalculator/
- Total ram: ram tổng của máy chủ, giả sử 4GB
- Reserved Ram: là RAM dành riêng cho mục đích cụ thể và không được sử dụng cho các ứng dụng hoặc quá trình thông thường, tuy nhiên chỗ này bạn nên hiểu là ram mà toàn bộ các mục khác chiếm và còn dành lại cho php-fpm, ta đặt reserved ram là 2GB
- Process size: Giống ở trên thông số này có thể lấy từ debugbar (Laravel), WordPress thì có thể tìm plugin keyword memory usage, hoặc dùng php https://www.php.net/manual/en/function.memory-get-usage.php để đo
Với cấu hình trên kết quả cho ra là 23 / 5 / 5 / 7
Tối ưu theo tideways
Cài đặt | Giá trị |
---|---|
max_children | (Tổng ram – Ram sử dụng cho Linux, DB, ...) / process size |
start_servers | Số CPU cores x 4 |
min_spare_servers | Số CPU cores x 2 |
max_spare_servers | Số CPU cores x 4 |
Với máy chủ, 2 CPU, 4GB RAM, 2GB dành cho tất cả mọi thứ và 1 process size ≈ 62.2 MB thì ra được 33 / 8 / 4 / 8
Tối ưu cho web ít tải
Ở bài chia sẻ trước Optimize Global PHP FPM đăng lên 1 group về vps/server thì mọi người có đưa ra thảo luận này mình để mọi người tham khảo
pm = dynamic
pm.max_children = 25
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1
Số 25 có thể giảm xuống thành 10, với cấu hình như thế này sẽ hạn chế tối đa process khởi động, và duy trì đảm bảo low memory
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận