Gần đây tôi thấy bộ nhớ của blog thỉnh thoảng bị "ăn" sau khi đăng nhập vào phần phụ trợ, lúc đầu tôi nghi ngờ là do Swap không đủ. vài G Swap về hosting VPS và quan sát một thời gian thì mình thấy Swap dù lớn đến đâu cũng bị "ăn" dần dần!
Rõ ràng là một số dịch vụ PHP đã chiếm bộ nhớ của VPS và chưa giải phóng nó, khiến cho Swap được gọi sau khi bộ nhớ vật lý cạn kiệt. Rõ ràng, Swap không chạy hiệu quả như bộ nhớ vật lý nên quá trình này trở nên khó khăn. mắc kẹt. Xét thấy website WordPress hiện nay sử dụng quá nhiều theme, plug-in nên tình trạng này xảy ra là điều bình thường.
Trong kiến trúc LNMP, PHP chạy ở chế độ FastCGI, theo tuyên bố chính thức, php-cgi sẽ tái chế tất cả bộ nhớ được tập lệnh sử dụng ở cuối mỗi yêu cầu, nhưng nó sẽ không giải phóng nó cho hệ điều hành mà sẽ tiếp tục. để giữ nó. Trả lời yêu cầu PHP tiếp theo. Và php-fpm là trình quản lý quy trình FastCGI, được sử dụng để kiểm soát bộ nhớ và quy trình của php.
Do đó, giải pháp là tối ưu hóa tổng số tiến trình và bộ nhớ bị chiếm bởi một tiến trình thông qua php-fpm, từ đó giải quyết vấn đề tiến trình php-fpm chiếm bộ nhớ lớn và không giải phóng bộ nhớ. Thêm các phương pháp tối ưu hóa máy chủ Linux và kinh nghiệm xây dựng trang web, cũng như:
- Hướng dẫn vận hành và cú pháp cơ bản lệnh Crontab của Linux Crontab-Tự động hóa máy chủ/VPS
- Đánh giá hiệu suất tốc độ máy chủ VPS của Alibaba Cloud Japan-Nhật Bản SoftBank Hong Kong NTT Line
- Độ phân giải tên miền DNS cho phép DNSSEC ngăn chặn việc chiếm quyền điều khiển DNS-Cài đặt DNS của Google Cloud DNSSEC
PS: Đã cập nhật vào ngày 14 tháng 12 năm 2018, Nếu bộ nhớ và hiệu suất của máy chủ VPS của bạn không tốt lắm, tốt nhất nên bật bộ nhớ đệm vào thời điểm này để tiết kiệm đáng kể mức tiêu thụ tài nguyên: WordPress cho phép tăng tốc bộ đệm Nginx fastcgi_cache phương thức -Ví dụ cấu hình Nginx.
PS: Cập nhật vào ngày 29 tháng 9 năm 2019, Do cấu phần tối ưu hóa máy chủ ngx_pagespeed do Google phát triển, nó tích hợp một bộ công cụ tối ưu hóa hoàn chỉnh như tải hình ảnh bị trì hoãn, webp thích ứng, tối ưu hóa JS và CSS cũng như hình ảnh tối ưu hóa: Tạo tác tối ưu hóa máy chủ PageSpeed-Nginx triển khai mô-đun ngx_pagespeed và trải nghiệm các hiệu ứng được tăng tốc.
1. Phân tích và xác định mức sử dụng bộ nhớ của php-fpm
Nếu bạn thấy máy chủ VPS bị kẹt, trước tiên hãy kiểm tra mức sử dụng bộ nhớ. Các lệnh thường được sử dụng là Top, Glances, Free, v.v. Những bạn nào không biết các lệnh này trước tiên có thể kiểm tra chủ đề xem trạm khai thác có làm được không: Hệ thống Linux Tóm tắt các lệnh giám sát - CPU chính, bộ nhớ, IO đĩa, v.v. để tìm ra các tắc nghẽn về hiệu suất.
Sử dụng lệnh Glances và nhấn m để xem mức sử dụng bộ nhớ của quá trình lưu trữ VPS hiện tại và sắp xếp chúng từ bộ nhớ chiếm nhiều nhất đến ít nhất (hoặc sử dụng lệnh Top và nhấn M, hiệu quả là như nhau). Như hình dưới đây (bấm vào để phóng to):
3.2 Giảm số lượng tiến trình php-fpm
Nếu bộ nhớ của máy chủ VPS của bạn bị chiếm dụng và cạn kiệt, bạn có thể kiểm tra số lượng tiến trình php-fpm của mình. Tính toán theo số lượng tiến trình php-fpm = bộ nhớ/2/30. 1GB bộ nhớ là 10- Từ 20 đến 20, tùy thuộc vào các tiện ích bổ sung được PHP của bạn tải.
3.3 ví dụ về cấu hình php-fpm
Ở đây, cấu hình VPS của php-fpm với bộ nhớ 1GB được sử dụng làm minh chứng cho hoạt động thực tế, giá trị cài đặt phải được xem xét dựa trên hiệu suất của chính máy chủ, PHP, v.v.
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. Giải quyết vấn đề tiến trình php-fpm không giải phóng bộ nhớ
Vấn đề giảm mức sử dụng bộ nhớ của php-fpm nêu trên đạt được bằng cách giảm tổng số tiến trình php-fpm trong quá trình sử dụng thực tế, người ta nhận thấy tiến trình php-fpm vẫn gặp vấn đề chiếm bộ nhớ trong thời gian dài mà không có. thả nó ra. Giải pháp là giảm số lượng pm.max_requests.
Số lượng yêu cầu tối đa, max_requests, có nghĩa là khi số lượng yêu cầu được xử lý bởi quy trình PHP-CGI tích lũy đến max_requests, quy trình sẽ tự động được khởi động lại, do đó đạt được mục đích giải phóng bộ nhớ. Lấy cài đặt máy chủ VPS có bộ nhớ 1GB làm ví dụ (nếu giá trị bạn đặt không đạt đến mức giải phóng bộ nhớ thì có thể tiếp tục hạ thấp):
pm.max_requests = 500
Khi quy trình php-fpm đạt đến giá trị do pm.max_requests đặt, quy trình sẽ được khởi động lại để giải phóng bộ nhớ. Hình ảnh bên dưới là kết quả sau khi thử nghiệm của tôi. Có thể thấy rằng quá trình php-fpm đã bị buộc phải chấm dứt và bộ nhớ đã được giải phóng.
5. Tóm tắt
Đối với các yêu cầu về bộ nhớ lớn, tính đồng thời và tính khả dụng, bạn nên sử dụng chế độ quản lý tĩnh + pm.max_children lớn nhất. Nếu là máy chủ có bộ nhớ nhỏ, nên sử dụng chế độ động hoặc theo yêu cầu và giảm số lượng tiến trình pm.start_servers và pm.max_spare_servers.
Tại sao các thông số điều chỉnh của tôi không đạt được hiệu quả như mong muốn? Theo kinh nghiệm của wzfou.com, các tham số tệp cấu hình php-fpm không thể khái quát. Chúng phải được điều chỉnh dựa trên hiệu suất của chính máy chủ, nội dung động WEB và các yêu cầu về tính khả dụng. Nếu bộ nhớ bị chiếm trong một thời gian dài, thì đó là. tốt nhất để kiểm tra xem có rò rỉ bộ nhớ hay không.
Được cập nhật vào ngày 9 tháng 10 năm 2019, Nếu thông số php-fpm của bạn được điều chỉnh quá nhỏ, có thể xảy ra lỗi 502 Giải pháp: Giải quyết lỗi 502 trong menu lưu chỉnh sửa nền WordPress.