it-swarm-vi.tech

Cách lý tưởng để cấu hình sử dụng bộ nhớ WordPress là gì?

Chúng tôi đang chạy một phiên bản nhiều trang WordPress trên hai máy chủ Rackspace Cloud, một web và một cơ sở dữ liệu, với 30 trang web hiện tại. Tôi đã đặt Nginx trước các tài sản tĩnh và Apache xử lý tất cả các yêu cầu động. Tôi cũng đã cấu hình Memcached cho cơ sở dữ liệu và bộ nhớ đệm mã op APC cho PHP. W3 Total Cache được bật theo mặc định trên tất cả các trang web chúng tôi có.

Nó rất tệ với một vấn đề: Các quy trình Apache thường có trọng lượng từ 80 đến 120 MB. Máy chủ web có 2 GB bộ nhớ, nghĩa là tôi nhận được 15 quy trình hoặc hơn cho đến khi mọi thứ diễn ra. Các quy trình rõ ràng không nên lớn như vậy nhưng tôi bối rối về lý do tại sao chúng là.

Một chiến lược tốt để xác định những gì đang xảy ra?

Cảm ơn trước!

Cập nhật 10/2/10: Đối với những người thắc mắc, độ phân giải của vấn đề bộ nhớ đã bị vô hiệu hóa PHP xdebug (vô tình được bật trên cấu hình và gây ra đột biến sử dụng bộ nhớ ngẫu nhiên).

8
Daniel Bachhuber

Dung lượng bộ nhớ quy trình Apache mà bạn nói về (80 đến 120 MB mỗi quy trình) có thể được chia thành hai lý do.

  1. Apache
  2. Wordpress

Apache

Bạn có thể tối ưu hóa Apache bằng cách chỉ tải số lượng mô-đun bạn cần và các điều chỉnh tối ưu hóa khác sẽ làm giảm bộ nhớ. Nếu bạn chưa tối ưu hóa điều đó, hãy cung cấp cho nó một số điều chỉnh.

Wordpress

Wordpress chỉ tiêu tốn rất nhiều bộ nhớ và không được tối ưu hóa cho lắm. Tôi sẽ bắt đầu với việc thay thế lớp cơ sở dữ liệu bằng một cái gì đó được thực hiện đúng hơn. Điều đó sẽ đạt được nhiều tốc độ hơn và giảm việc sử dụng bộ nhớ rất nhiều. Bên cạnh đó tôi không có nhiều điều để đề nghị. Tôi không sử dụng Worpdress không được coi là hữu ích.

Chiến lược

Để tìm hiểu những gì đang diễn ra, bạn cần theo dõi bao nhiêu bộ nhớ mà một yêu cầu wordpress đang chiếm. Có một chức năng sử dụng tối đa ( memory_get_peak_usage() ) bạn có thể sử dụng để theo dõi việc sử dụng bộ nhớ worpdress. Nếu nó gần với 80 - 120 MB bạn đã viết, bạn biết rằng wordpress đang tạo ra sự đau đầu của bạn. Bạn có thể muốn ghi nhật ký dấu thời gian, bộ nhớ cao nhất, thời gian thực hiện và URI được yêu cầu.

Sử dụng Nginx để phục vụ các trang wordpress được lưu trong bộ nhớ cache chắc chắn sẽ giúp ích cho bạn bởi vì nó sẽ ngăn không cho wordpress được tải - ngay cả đối với các bộ đệm "gửi đến" như trang bạn sử dụng. Chúng bị hỏng về mặt khái niệm vì chúng là một plugin wordpress, vì vậy ít nhất một phần của wordpress cần phải được tải ngay cả đối với các kết quả được lưu trữ.

4
hakre

Daniel,

Tôi tôn trọng không đồng ý với kenkeiter, tôi hiểu rằng sử dụng nginx như một proxy ngược ra trước Apache. Luật Harvard đã thành công lớn với phương pháp này và họ có một bài viết tuyệt vời về cách họ thực hiện điều này, với một liên kết đến plugin WordPress của họ giúp giao diện với nginx:

http://bloss.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Những gì họ phát hiện ra tại Luật Harvard là, về cơ bản nginx lưu trữ tất cả các yêu cầu trong giao diện người dùng, nó thực sự không cải thiện hiệu suất để sử dụng bất kỳ plugin loại bộ đệm nào khác trong phụ trợ và không đáng để phức tạp thêm. Nếu bạn nghiêm túc về việc sử dụng nginx theo cách này, tôi khuyên bạn nên xem bài viết đó về trải nghiệm của họ và cố gắng giảm bớt các quy trình động, bao gồm cả bộ nhớ đệm phía WP.

Một số điều tra cơ bản như xem xét cẩn thận truy cập Apache và nhật ký lỗi của bạn để xem loại truy vấn nào thực sự phải được thực hiện một cách linh hoạt và cố gắng giảm các trường hợp như vậy cũng có thể là một khởi đầu tốt.

1
mitcho

Chà, trước hết, bạn đang sử dụng Apache và Nginx - loại dự phòng. Bạn nên sử dụng Nginx/FastCGI w/PHP. Các hướng dẫn tại trang web này sẽ giúp đỡ. Mặt khác, dự đoán tốt nhất của tôi là một số thay đổi gần đây đối với mã của bạn đang gây ra một số lỗi trong PHP để giải phóng bộ nhớ đúng cách. Không có lý do gì mà một quy trình Apache sẽ tiêu tốn nhiều bộ nhớ như vậy.

http://interfacelab.com/nginx-php-fpm-apc-awclaw/

Chúc may mắn!

@kenkeiter

0
kenkeiter