HestiaCP PHP-FPM đang phải chịu tải nặng? Lỗi 500 của trang web động? Việc tối ưu hóa này sẽ có hiệu lực ngay lập tức!

Bạn đã từng gặp phải tình huống này chưa?Truy cập trang web đột nhiên chậm lại hoặc thậm chí dẫn đến lỗi 500. Sau khi khởi động lại PHP-FPM, mọi thứ trở lại bình thường.nhưng sau một thời gian vấn đề lại tái diễn? Thật là bực mình!

Tại sao chuyện này đang xảy ra?Trên thực tế, điều này thường làNhóm quy trình PHP-FPM không được cấu hình đúng cách hoặc tài nguyên máy chủ không đủ.gây ra bởi. Hôm nay, chúng tôi sẽ tối ưu hóa triệt để HestiaCP PHP-FPM giúp cho trang web trở nên ổn định như đá!

Lý do cốt lõi khiến PHP-FPM bị quá tải

PHP-FPM là mộtQuản lý quy trình, chịu trách nhiệm xử lý các yêu cầu động. Nếu cấu hình không hợp lý có thể dẫn đến:

  • Tài nguyên máy chủ đã cạn kiệt, khiến PHP-FPM không thể phản hồi các yêu cầu mới một cách kịp thời;
  • Quá ít quy trình, khi lưu lượng truy cập tăng đột ngột, không thể xử lý kịp thời;
  • Quy trình sử dụng quá cao, khiến cho CPU phải hoạt động quá tải.

HestiaCP PHP-FPM đang phải chịu tải nặng? Lỗi 500 của trang web động? Việc tối ưu hóa này sẽ có hiệu lực ngay lập tức!

Làm sao để biết PHP-FPM có bị quá tải không?

co thể sử dụng tophtop Lệnh để xem mức sử dụng CPU và bộ nhớ:

top -c

Nếu bạn thấy thông tin quy trình tương tự như sau, điều đó có nghĩa là PHP-FPM đang chạy dưới tải cao:

1669293 abc     20   0  790284 227880 185568 R  73.1   0.9   1:30.09 php-fpm: pool chenweiliang.com                                                    
1669522 abc     20   0  801924 224224 170236 R  69.9   0.9   0:59.01 php-fpm: pool chenweiliang.com

Bạn có thấy những tiến trình này chiếm tới 70% CPU không? Nếu điều này xảy ra thường xuyên, PHP-FPM của bạn Phải có một vấn đề!

Vậy, làm thế nào chúng ta có thể tối ưu hóa cấu hình PHP-FPM để máy chủ không còn bị quá tải?

Tối ưu hóa nhóm quy trình PHP-FPM (điều chỉnh tham số cốt lõi)

Đầu tiên, mở php-fpm Tệp cấu hình:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Đổi sang phiên bản PHP của bạn, chẳng hạn như PHP8.3, và đổi thành:/etc/php/8.3/fpm/pool.d/www.conf

Truy vấn phiên bản PHP được thiết lập bởi HestiaCP

v-list-web-domain user domain.com

Ví dụ:

v-list-web-domain abc chenweiliang.com

Trong kết quả đầu ra, bạn sẽ thấy nội dung tương tự như sau:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Điều này có nghĩa là trang web sử dụng PHP 8.3.

Hãy cùng xem cấu hình PHP-FPM của bạn:

[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660

user = abc
group = abc

pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s

Bạn có thể thấy rằng pm được sử dụng là ondemand,Mặc dù có thể giảm mức sử dụng tài nguyên trong thời gian nhàn rỗi, nhưng khi lưu lượng truy cập đột nhiên tăng lên, quy trình có thể không phản hồi kịp thời., dẫn đến lỗi 500.

1. Điều chỉnh các tham số nhóm quy trình PHP-FPM

Nếu cấu hình sử dụng dynamicĐây là phương pháp khởi động trước một số quy trình công việc và điều chỉnh chúng một cách linh hoạt theo khối lượng yêu cầu, có thể phản hồi nhanh hơn khi khối lượng yêu cầu tăng đột ngột.

Đối với các trang web có lượng truy cập nhất định, nên sử dụng pm = dynamicBởi vì nó có thể duy trì một lượng tiến trình nhàn rỗi nhất định và tránh 500 lỗi trong quá trình đồng thời cao.

Chỉ nên sử dụng tính năng này khi dung lượng truy cập cực thấp và tài nguyên bộ nhớ eo hẹp. pm = ondemand Để tiết kiệm tài nguyên.

Đề nghị để ondemandvà tối ưu hóa pm.max_children Và các thông số khác:

pm = dynamic
pm.max_children = 16  ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4   ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2  ; 最小空闲进程数
pm.max_spare_servers = 7  ; 最大空闲进程数
pm.max_requests = 3000    ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s  ; 空闲进程 10s 后自动退出

Tại sao bạn lại muốn thay đổi như thế này?

  • pm = dynamic: Phân bổ các quy trình linh hoạt hơn để tránh tình trạng chờ yêu cầu có thể xảy ra do theo yêu cầu;
  • pm.max_children = 16: Ngăn ngừa 500 lỗi do quá ít quy trình gây ra;
  • pm.start_servers = 5: Tránh khởi động tiến trình chậm;
  • pm.max_requests = 3000:Ngăn chặn rò rỉ bộ nhớ, tái chế quy trình thường xuyên.

2. Giới hạn thời gian thực hiện các tập lệnh PHP để tránh tình trạng chiếm dụng lâu dài

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Điều này có thể ngăn ngừa một sốCác tập lệnh PHP sử dụng quá nhiều CPU có thể làm sập máy chủ của bạn.

Sau khi lưu, hãy khởi động lại tiến trình PHP:

sudo systemctl restart php8.3-fpm

Bật chức năng giám sát trạng thái PHP-FPM để theo dõi tiến trình bất cứ lúc nào

Bật chức năng giám sát quy trình PHP-FPM và xem bất kỳ lúc nàoSố lượng hiện tại của các tiến trình đang hoạt động và trạng thái yêu cầu đang chờ, để tránh tình trạng quá tải máy chủ.

php-fpm.conf Đã thêm vào:

pm.status_path = /status

Sau đó, cấu hình Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
}

Bằng cách này, bạn có thể http://yourdomain.com/status Hãy xem PHP-FPM hoạt động như thế nào!

Tối ưu hóa nhật ký PHP-FPM để nhanh chóng khắc phục sự cố

php-fpm.conf 添加:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s  ; 执行超过 5s 的脚本记录到日志

Theo cách này, bất cứ khi nào lỗi 500 xảy ra, bạn có thể trực tiếp xem nhật ký:

tail -f /var/log/php-fpm/error.log

Xem PHP có báo lỗi không, chẳng hạn như out of memory,script execution timeout Chờ đợi.

Khởi động lại PHP-FPM thường xuyên để tránh rò rỉ bộ nhớ

có thể vượt qua cron Khởi động lại PHP-FPM thường xuyên để ngăn chặn các tiến trình chạy lâu gây raRò rỉ bộ nhớ.

crontab -e

Thêm tác vụ theo lịch trình sau để tự động khởi động lại PHP-FPM lúc 3 giờ sáng hàng ngày:

0 3 * * * /usr/sbin/service php8.3-fpm restart

Nếu vấn đề vẫn tiếp diễn thì sao? Tối ưu hóa hơn nữa!

Nếu bạn vẫn thực hiện theo cách tối ưu hóa ở trênThỉnh thoảng xảy ra 500 lỗi, bạn có thể tiếp tục với các tối ưu hóa sau:

1. Bật OPcache để cải thiện hiệu quả thực thi PHP

Nếu OPcache chưa được bật, bạn có thể cài đặt nó như thế này (ví dụ sử dụng Ubuntu):

sudo apt install php8.3-opcache -y

Sau đó chỉnh sửa php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

Tác dụng? Tốc độ thực thi trang PHP đã được cải thiện đáng kể!

2. Tối ưu hóa cấu hình Nginx

Đảm bảo rằng các tham số liên quan đến Nginx là hợp lý, chẳng hạn như fastcgi_read_timeout Điều chỉnh phù hợp để tránh việc các tập lệnh PHP bị Nginx chấm dứt do thời gian thực thi quá dài:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Tóm tắt: Tối ưu hóa PHP-FPM và trang web sẽ không còn bị sập nữa!

Chúng tôi đã thực hiện những điều chỉnh nào sau khi tối ưu hóa này?

✅ Tối ưu hóa nhóm quy trình PHP-FPM,sử dụng ondemandVà tối ưu hóa pm.max_children tham số;
Giới hạn thời gian thực thi của các tập lệnh PHP, để ngăn chặn việc chiếm dụng CPU trong thời gian dài;
Bật giám sát PHP-FPM, xem tiến trình tải theo thời gian thực;
Tối ưu hóa nhật ký PHP-FPM, nhanh chóng khắc phục 500 lỗi;
Khởi động lại PHP-FPM thường xuyên, ngăn chặn rò rỉ bộ nhớ;
Bật OPcache, cải thiện hiệu quả thực thi PHP;
Tối ưu hóa cấu hình Nginx, để tránh vấn đề hết thời gian.

Sau khi tối ưu hóa, tải PHP-FPM sẽ giảm đáng kể và hoạt động của trang web sẽ ổn định hơn! 🔥

Hãy thử ngay nhé! 💪🚀

Hy vọng Chen Weiliang Blog ( https://www.chenweiliang.com/ ) đã chia sẻ "Tải PHP-FPM của HestiaCP quá cao? Lỗi 500 của trang web động? Việc tối ưu hóa này sẽ có hiệu lực ngay lập tức! ”, điều này có thể hữu ích với bạn.

Chào mừng bạn đến chia sẻ liên kết của bài viết này:https://www.chenweiliang.com/cwl-32512.html

Để khám phá thêm nhiều mẹo ẩn🔑, vui lòng tham gia kênh Telegram của chúng tôi!

Chia sẻ và thích nếu bạn thích nó! Những chia sẻ và lượt thích của bạn là động lực tiếp tục của chúng tôi!

 

发表 评论

Địa chỉ email của bạn sẽ không được công bố. 项 已 * 标注

Di chuyển về đầu trang