PHP-FPM là gì ? Cấu hình tối ưu pm.max_children cho PHP-FPM

  • Sunday 22/09/2024

I. PHP-FPM là gì

PHP-FPM

PHP-FPM (FastCGI Process Manager) là một trình quản lý PHP thay thế cho FastCGI, với các tính năng bổ sung để có thể tối ưu cho các website có lượng truy cập lớn. Ưu điểm chính của PHP-FPM là nó sử dụng ít tài nguyên hơn so với bất kỳ giải pháp chạy PHP nào khác, qua đó quản lý hiệu quả tài nguyên và giúp tăng tốc website.

Trong nhiều trường hợp, việc tối ưu không tốt PHP-FPM không tốt có thể khiến server bị giới hạn khả năng chịu tải, trong khi vẫn dư thừa tài nguyên. Cụ thể hơn, Quý khách có thể thấy xuất hiện những lỗi như sau trong error log của PHP-FPM:

[05-Jun-2024 10:25:35] WARNING: [pool www] server reached pm.max_children setting (10), consider raising it
[05-Jun-2024 10:25:35] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 9 total children

Thông báo này có nghĩa là PHP-FPM đang bận và không thể xử lý lưu lượng truy cập cao với các tham số cấu hình hiện có.

PHP-FPM có thể dẫn đến quá tải máy chủ do nhiều lý do:

  • Quá nhiều tiến tình chạy do lưu lượng truy cập cao hoặc bị tấn công
  • Cấu hình PHP-FPM không được tối ưu so với tài nguyên của máy chủ

II. Tối ưu PHP-FPM

  1. Thông số máy chủ

    • Đầu tiên, hãy xác định lại thông số máy chủ của bạn. Số core CPU và kích thước bộ nhớ RAM hiện có của server, lượng tài nguyên sẽ sử dụng cho PHP-FPM.
    • Ví dụgiả sử bạn có 4vCPU và RAM 16 GB
      Trong bài viết này, chúng tôi sẽ sử dụng 10 GB RAM để phân bổ cho hoạt động PHP.
  2. Tính dung lượng RAM tiêu thụ của mỗi tiến trình PHP-FPM

    • Thực thi lệnh sau để kiểm tra dung lượng RAM mà mỗi tiến trình PHP-FPM đang sử dụng.
      ps -ylC php-fpm7.4 --sort:rss

      (Thay thế với đúng tên phiên bản PHP đang sử dụng)

    • Kết quả nhận được sẽ giống như bên dưới:
      S UID PID  PPID C PRI NI RSS    SZ     WCHAN TTY TIME      CMD 
      S 0   8120 1    0 80  0  31244  130012 -     ?   00:00:05  php-fpm7.4 
      S 33  5682 8040 1 80  0  150036 158027 -     ?   00:00:04  php-fpm7.4 
      S 33  4750 8040 2 80  0  150724 150376 -     ?   00:00:16  php-fpm7.4 
      S 33  5684 8040 2 80  0  150272 150342 -     ?   00:00:08  php-fpm7.4
    • Hãy lưu ý các giá trị bên dưới cột RSS. Đây là bộ nhớ được sử dụng bởi mỗi tiến trình PHP-FPM của bạn. Như trên, chúng ta có trung bình khoản 150 MB RAM được sử dụng cho mỗi tiến trình con PHP-FPM.
  3. Cấu hình PHP-FPM

    • File cấu hình PHP-FPM
      /etc/php/7.4/fpm/pool.d/www.conf

      Đường dẫn có thể sẽ khác tùy thuộc vào phiên bản php. Có 4 giá trị chúng ta cần lưu ý khi cấu hình php-fpm, bao gồm:

      • pm.max_children
      • pm.start_servers
      • pm.min_spare_servers
      • pm.max_spare_servers
    • pm.max_children
      Giá trị max_children nên được tính bằng cách lấy tổng dung lượng bộ nhớ RAM sử dụng cho PHP-FPM chia cho dung lượng ram tiêu thụ trung bình cho mỗi tiến trình PHP-FPM (2).
      Ví dụ: trong bài hướng dẫn này, chúng ta có 10 GB RAM (10000 MB) phân bổ cho mỗi tiến trình 150 MB, nên:

       pm.max_children = 10000 / 150 ~ 67
    • pm.start_servers
      Giá trị start_servers nên được tính bằng cách lấy số core CPU nhân với 4.
      Ví dụ: trong hướng dẫn này, số core của server là 4, nên:

      pm.start_servers = 4 x 4 = 16
    • pm.min_spare_servers
      Giá trị min_spare_servers nên được tính bằng cách lấy số core CPU nhân với 2.
      Ví dụ:  trong môi trường hướng dẫn này:

      pm.min_spare_servers = 4 x 2 = 8
    • pm.max_spare_servers
      Giá trị max_spare_servers cũng nên được tính bằng lấy số lượng core CPU nhân với 4.
      Ví dụ: trong môi trường bài hướng dẫn này:

      pm.max_spare_servers = 4 x 4 = 16
    • Chúng ta được kết quả cuối cùng:
      pm.max_children = 67 
      pm.min_spare_servers = 8 
      pm.max_spare_servers = 16 
      pm.start_servers = 16
  4. Lưu lại và khởi động lại dịch vụ  PHP-FPM:

        sudo service php7.4-fpm restart

Thực hiện các thay đổi trên là các bạn đã tối ưu hóa được các thông số của php-fpm. Chúc các bạn thực hiện thành công.

Các bạn có thể tham khảo thêm các bài viết khác về tại đây

P.A Việt Nam cung cấp đa dạng các cấu hình Máy Chủ Ảo và Máy Chủ Riêng :
Cloud Server
Cloud Server Pro
Máy Chủ Riêng

Tham khảo các ưu đãi: https://www.pavietnam.vn/vn/tin-khuyen-mai/





Rate this post