Điểm:1

PHP-FPM + nginx - Nhóm bận và tối ưu hóa cho mã PHP không hợp lệ - Lỗi 502

lá cờ br

Tôi đã từng rơi vào tình huống không thể làm cho PHP-FPM hoạt động ngay cả khi lưu lượng truy cập tăng nhẹ. Đã cố gắng truy tìm nguyên nhân thực sự trong một thời gian và cho đến nay vẫn chưa thành công.

Nó bắt đầu với một trang web cụ thể đưa ra lỗi 502, nhìn vào nhật ký PHP-fpm tôi nhận được điều này:

CẢNH BÁO: [nhóm www-userA] có vẻ bận (bạn có thể cần tăng pm.start_servers hoặc pm.min/max_spare_servers), sinh ra 8 con, có 39 con nhàn rỗi và tổng cộng 49 con

Tiếp theo, tôi đã kiểm tra tài nguyên máy chủ, hàng đầu cho biết nó gần như bằng 0 với mức sử dụng tài nguyên chỉ 2-4%. Tiếp theo là điều chỉnh nhóm PHP-FPM:

chiều = động
pm.max_children = 800
pm. process_idle_timeout = 5 giây
pm.start_servers = 40
pm.min_spare_servers = 40
pm.max_spare_servers = 80
pm.max_requests = 500
php_admin_value[max_execution_time] = 60

; Đã thêm sau để khắc phục sự cố thêm
request_slowlog_timeout = 5s
ghi chậm = /var/log/pool_userA_fpm_slow_log

;Được thêm sau để bù đắp nếu có vấn đề về hàng đợi để khắc phục sự cố
lắng nghe.backlog =24000

Tôi đã xem hầu hết mọi bài đăng PHP-FPM liên quan đến chủ đề này, bao gồm: https://stackoverflow.com/questions/25097179/warning-pool-www-seems-busy-you-may-need-to-increase-pm-start-servers-or-pm

Máy chủ này có khoảng 12GB RAM và bộ xử lý 8 nhân chỉ dành cho nginx+php-fpm. Mỗi quy trình PHP của tôi là khoảng 15-20 MB mỗi quy trình.

Đã thử tăng pm.max_children = 1500 nhưng sau một thời gian lại gặp lỗi tương tự đối với "Bể bơi đang bận".

Sau đó, tôi đã bật ghi chậm trong php-fpm và cũng bật ghi chậm cho mysql.

  • Trong nhật ký chậm của php-fpm, tôi thấy một số trang php mất khoảng 5 giây để hoàn thành,
  • Trong nhật ký chậm mysql, đã tìm thấy một số truy vấn kiểm tra 2-5 triệu hàng (mất khoảng 5 giây để hoàn thành)

Giả sử rằng tập lệnh PHP có thể gây ra hàng đợi hoặc tồn đọng, vì vậy tôi đã thêm lắng nghe.backlog =24000 cũng như trong /etc/security/limits.conf đã thêm giới hạn cứng và mềm cho người dùng cụ thể này để có không gian cho các tập lệnh chậm,

userA mềm nofile 4096
userA cứng nofile 65536

Hơn nữa trong sysctl tức là.

tiếng vang "net.core.somaxconn=65536" >> /etc/sysctl.conf

Hơn nữa trong php-fpm master php-fpm.conf được thêm vào, tức là. tâm sự bên ngoài hồ bơi:

rlimit_files = 65536
rlimit_core = 0

Của tôi ulimit -Hn nói:

524288

Hơn nữa, vì php-fpm đang bận, tôi thấy rằng tôi có thể thêm các lệnh sau vào php-fpm để khởi động lại trong trường hợp bận, nhưng điều đó không xảy ra, tôi phải khởi động lại thủ công php-fpm để trang web hoạt động trở lại :

[toàn cầu]
khẩn cấp_restart_threshold 10
Emergency_restart_interval 1m
process_control_timeout 10s

Như đã nói, lệnh trên không thực hiện khởi động lại trong trường hợp nhóm bị lỗi trong php-fpm.log

Cho đến nay, tôi đoán rằng do tập lệnh PHP chậm, các con php-fpm của tôi đang cạn kiệt và gây ra lỗi 502. Tôi không kiểm soát được PHP và tôi cần trình bày giải pháp bằng cách điều chỉnh cấu hình máy chủ cho nó.

Tôi đã cố gắng tăng pm.max_children = 2000 nhưng vẫn cùng một vấn đề. Đôi khi nhận được Hết thời gian chờ cổng 504 lỗi.

Mặt khác, nếu tôi chiều đã thay đổi = theo yêu cầu

Tôi nhận được thông báo sau đầu tiên:

 listen.backlog(25000) quá thấp đối với trình quản lý quy trình theo yêu cầu. Mình cập nhật cho bạn là 65535

Sau đó gặp lỗi này và lần này lại là lỗi 504:

[11-Tháng 11-2021 06:56:45] CẢNH BÁO: Máy chủ [pool userA] đã đạt đến cài đặt max_children (800), hãy cân nhắc tăng cài đặt này.

Một điều cần lưu ý là hầu như không có tải trên máy chủ trong mọi trường hợp, mức sử dụng tài nguyên là 2-4%. Vì vậy, tôi đoán là vấn đề cấu hình của nó nhiều hơn là sử dụng tài nguyên.

Tôi đã xem hầu hết tất cả các chủ đề liên quan đến PHP-FPM ở đây trên serverfault và rất nhiều tài liệu nhưng vẫn không thu được gì. Ở đây hy vọng ai đó có thể chỉ cho tôi đi đúng hướng.

Cảm ơn

Wilson Hauck avatar
lá cờ jp
Yêu cầu thông tin bổ sung, xin vui lòng. Bất kỳ thiết bị SSD hoặc NVME nào trên máy chủ MySQL Host? Đăng trên pastebin.com và chia sẻ các liên kết. Từ thư mục gốc đăng nhập SSH của bạn, Kết quả văn bản của: A) CHỌN COUNT(*) TỪ information_schema.tables; B) HIỂN THỊ TRẠNG THÁI TOÀN CẦU; sau tối thiểu 24 giờ C) HIỂN THỊ BIẾN TOÀN CẦU; D) HIỂN THỊ ĐẦY ĐỦ QUY TRÌNH; VÀ thông tin rất hữu ích, bao gồm - htop HOẶC hàng đầu cho hầu hết các ứng dụng đang hoạt động, ulimit -a cho danh sách giới hạn Linux/Unix, iostat -xm 5 3 cho IOPS theo thiết bị và số lượng lõi/cpu, để phân tích điều chỉnh khối lượng công việc của máy chủ nhằm đưa ra đề xuất.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.