algolia search

Tìm thấy x bài viết trong xms.

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
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ụ
pm = static
pm.max_children = 5
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s

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
apt install bc -y
server_ram_total=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
server_ram_mb=$(echo "scale=0;$server_ram_total/1024" | bc)
max_children=$(echo "scale=0;$server_ram_mb*0.4/30" | bc)

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

 

Đánh giá bài viết

Thích thì like
Tối ưu PHP-FPM Fast Process Manager
5/5 1 votes

Bình luận

Hiển thị bình luận Facebook