Máy chủ ảo VPS 8 nhân 24GB bị hết bộ nhớ? Hướng dẫn thực hành tối ưu hóa nhóm tiến trình PHP-FPM với HestiaCP.

Số lượng người dùng đồng thời mà một máy chủ có thể xử lý không phụ thuộc vào số lõi xử lý mà phụ thuộc vào lượng bộ nhớ mà mỗi tiến trình tiêu thụ.

Tuyên bố này có thể nghe có vẻ khiêu khích, nhưng đó lại là trải nghiệm thực tế và đau đớn nhất trong ngành vận hành và bảo trì.

Tại sao bộ nhớ lại là nút thắt cổ chai chính?

Nhiều người khi nhìn thấy một VPS với CPU 8 nhân và 24GB bộ nhớ thường nghĩ rằng họ có thể dễ dàng chạy hàng trăm tiến trình PHP-FPM.

Tuy nhiên, trên thực tế, mức sử dụng bộ nhớ RSS của một tiến trình PHP duy nhất thường lên tới 200MB.

Đây là kết quả thu được thông qua quá trình thử nghiệm thực tế bằng dòng lệnh:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

Trong cấu trúc phức tạp và môi trường đa plugin của HestiaCP , đặc biệt là khi không có tối ưu hóa OPcache, 200MB là mức dung lượng thông thường.

Điều này có nghĩa là bộ nhớ, chứ không phải CPU, mới là giới hạn cứng quyết định khả năng xử lý đồng thời tối đa.

Máy chủ ảo VPS 8 nhân 24GB bị hết bộ nhớ? Hướng dẫn thực hành tối ưu hóa nhóm tiến trình PHP-FPM với HestiaCP.

Tệp cấu hình được đề xuất (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Logic tính toán tham số và cơ sở thiết lập

Thông số cấu hìnhThiết lập giá trịCơ sở tính toán và thiết lập cốt lõi
pmdynamicChế độ động cho phép thêm hoặc xóa các tiến trình một cách linh hoạt dựa trên yêu cầu về đồng thời xử lý, cân bằng giữa tốc độ phản hồi và việc sử dụng bộ nhớ.
chiều.max_children80Tổng bộ nhớ 24GB, không bao gồm nhân hệ thống. MySQL/RedisSau Nginx, còn lại khoảng 16GB dung lượng dành cho PHP.16,384 MB / 200 MB ≈ 81.9Đặt giá trị này thành 80 có thể loại bỏ hoàn toàn lỗi OOM (Out of Memory) khi có nhiều tác vụ đồng thời.
pm.start_servers16Chế độ làm nóng trước khi khởi động được thiết lập gấp đôi số lõi CPU (8 lõi × 2 = 16) để đảm bảo dịch vụ có thể xử lý đồng thời các tác vụ cơ bản ngay lập tức sau khi khởi động lại.
pm.min_spare_servers8Đặt số lõi CPU là 8 lõi để đảm bảo có thể xử lý các yêu cầu mới bất cứ lúc nào trong thời gian lưu lượng truy cập thấp.
pm.max_spare_servers24Hãy đặt giá trị này bằng 3 lần số lõi CPU (8 lõi × 3 = 24) để duy trì một số lượng tiến trình vừa phải sau khi lưu lượng truy cập giảm xuống, nhằm xử lý các biến động nhẹ.
chiều.max_requests500Nếu một tiến trình duy nhất đạt đến dung lượng bộ nhớ cơ sở lớn là 200MB, việc giảm số lượng yêu cầu xuống còn 500 sẽ hủy bỏ và xây dựng lại tiến trình đó, giúp dọn dẹp các lỗi rò rỉ bộ nhớ ngầm nhanh hơn.
chiều.process_idle_timeout10s超出 min_spare_servers Các tiến trình không hoạt động sẽ tự động được giải phóng và trả về bộ nhớ hệ thống sau 10 giây không có yêu cầu nào.

Các thiết lập hỗ trợ thiết yếu và đề xuất tối ưu hóa

1. Cơ chế chống say rượu theo thời gian

request_terminate_timeout = 60s Đó là điểm mấu chốt.

Nó có thể buộc chấm dứt các tiến trình bị kẹt do tình trạng bế tắc cơ sở dữ liệu hoặc bị chặn bởi API của bên thứ ba.

Trong khi đó, Nginx của fastcgi_read_timeout Thời gian giữ phải ít nhất 60 giây, nếu không khách hàng sẽ nhận được tin nhắn sớm hơn dự kiến. 504 Gateway Timeout.

2. Các chiến lược để khắc phục các nút thắt cổ chai về bộ nhớ

Số lượng tối đa 80 tiến trình đồng thời có nghĩa là trong điều kiện đồng thời cực độ, hệ thống có thể xử lý tối đa 80 yêu cầu HTTP động cùng một lúc.

Nếu muốn cải thiện hơn nữa hiệu năng, trọng tâm nên là giảm mức sử dụng bộ nhớ cho mỗi tiến trình.

  • Bật OPcache:Trong php.ini Cấu hình tầm trung opcache.enable=1opcache.memory_consumption=256Việc sử dụng bộ nhớ đệm mã bytecode có thể giảm mức sử dụng bộ nhớ của một tiến trình duy nhất từ ​​200MB xuống còn 60~100MB.
  • Kiểm soát hợp lý giới hạn bộ nhớ:将 php.ini ở giữa memory_limit Giới hạn ở 128M256MĐể ngăn ngừa các kịch bản bất thường riêng lẻVô hạnNó tiêu tốn rất nhiều bộ nhớ.

Khi mức sử dụng bộ nhớ của một tiến trình giảm xuống còn 100MB...pm.max_children Nó có thể được nâng cấp một cách an toàn lên 150 Ngoài ra, khả năng xử lý đồng thời đã tăng gần gấp đôi.

Các quan điểm có thẩm quyền được trích dẫn

Theo các khuyến nghị trong tài liệu chính thức của Nginx :

"Các ứng dụng FastCGI luôn cần được giám sát bằng các chỉ thị thời gian chờ để ngăn ngừa tình trạng cạn kiệt tài nguyên."
(Nguồn: Tài liệu Nginx)

Sách hướng dẫn chính thức của PHP nêu rõ:

"pm.max_children xác định số lượng tối đa các tiến trình con được tạo ra. Đây là chỉ thị quan trọng nhất."
(Nguồn: Tài liệu PHP-FPM)

Những quan điểm có thẩm quyền này hoàn toàn phù hợp với thực tiễn của chúng tôi, chứng minh rằng logic tối ưu hóa không chỉ dựa trên kinh nghiệm mà còn dựa trên các thực tiễn tốt nhất được tiêu chuẩn hóa.

Kết luận: Quan điểm và những trích dẫn quan trọng của tôi

Trong các kịch bản có độ đồng thời cao, CPU là động cơ, bộ nhớ là bình nhiên liệu, còn PHP-FPM là người điều phối đội xe.

Dù động cơ có mạnh đến đâu, nếu bình xăng không đủ lớn, đoàn xe cũng không thể đi được xa.

Các chuyên gia thực thụ không mù quáng thiết lập các thông số ở mức tối đa, mà thay vào đó tính toán chính xác mức sử dụng bộ nhớ của từng tiến trình để tránh lãng phí và tràn bộ nhớ.

Bản chất của tối ưu hóa là tìm ra sự cân bằng tối ưu với nguồn lực hạn chế.

Đây không chỉ là một công nghệ, mà còn là một triết lý.

Do đó, đừng tin rằng "số lượng lõi xử lý quyết định tất cả". Điều thực sự quyết định giới hạn xử lý đồng thời là khả năng kiểm soát bộ nhớ của bạn.

Hãy hành động và tối ưu hóa VPS của bạn để đạt được tiềm năng tối đa, tận dụng tối đa từng giọt bộ nhớ.

Hy vọng bài viết "VPS 8 nhân 24G hết bộ nhớ? Tinh chỉnh tối ưu nhóm tiến trình PHP-FPM dưới HestiaCP" được chia sẻ trên blog của Chen Weiliang ( https://www.chenweiliang.com/ ) sẽ hữu ích cho bạn.

Bạn có thể thoải mái chia sẻ liên kết bài viết này: https://www.chenweiliang.com/cwl-34509.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!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Di chuyển về đầu trang