Một trong 7 trang web Drupal của tôi có hàng ngàn trường, một loạt các loại nội dung, hơn 25 lượt xem và hàng trăm (sắp có hàng nghìn) loại hồ sơ. Do đó, tôi đang sử dụng một bản vá lõi giúp lưu trữ thông tin trường thực thể tốt hơn (http://drupal.org/node/1040790) và phiên bản -dev của Chế độ xem giúp lưu trữ lượt xem tốt hơn bằng cách hiển thị (thay vì có một HUGE xem hàng cache với tất cả dữ liệu xem trong đó).
Điều này đã giúp hầu hết các trang trên trang web tải với 20-30 MB RAM được sử dụng, thay vì 160 MB + (thay vì kéo lên các hàng bảng cache_ * cho các trường và chế độ xem là 10MB +, các bản vá giúp giữ dữ liệu cache_ * hiệu quả hơn nhiều).
Điều này giới thiệu một vấn đề, tuy nhiên, trong đó việc xây dựng lại bộ đệm mất rất nhiều thời gian . Thường là hơn một hoặc hai phút. Và trong thời gian này, Drupal chỉ đơn giản là không tải bất kỳ trang nào (vì các bộ nhớ cache mà nó đang cố đọc từ chưa được xây dựng, các yêu cầu khác phải chờ).
Trong chu kỳ lưu lượng thấp, đây không phải là vấn đề lớn; Một trăm người dùng sẽ chỉ phải đợi một phút trước khi tải trang. Nhưng trong các chu kỳ lưu lượng truy cập cao, máy chủ Apache bắt đầu phát điên, với hơn 40 lần tải CPU và bộ nhớ nhanh chóng bị lấp đầy vì tất cả các luồng công nhân ngồi chờ và tối đa hóa bộ nhớ của chúng, gây ra sự tráo đổi. Đó là một vòng xoáy chết chóc. Việc khởi động lại httpd sẽ xóa mọi thứ, nhưng phải mất 5-10 phút để mọi thứ trở lại bình thường.
Mục tiêu của tôi là làm cho nó để xóa bộ nhớ cache không đưa trang web đến đầu gối của nó. Đối với một người, nếu tôi sử dụng các chức năng xóa bộ nhớ cache riêng lẻ của admin_menu (như "CSS và JS", sau đó là "Menu", sau đó "Đăng ký chủ đề", v.v.), mọi thứ sẽ diễn ra suôn sẻ cho đến khi tôi nhấn tùy chọn "Trang và các trang khác". Đó là khi bộ đệm của chế độ xem được đặt lại (hoạt động rất mạnh mẽ của CPU và cơ sở dữ liệu với số lượt xem cần được lưu vào bộ đệm) và khi bộ đệm thông tin trường được đặt lại (cũng là CPU và dữ liệu dữ liệu trên trang web này).
Vì vậy, ... câu hỏi / ý tưởng của tôi:
- Sử dụng drush và / hoặc các kịch bản shell khác, tôi có thể xóa bộ nhớ cache theo cách thông minh hơn là "nổ tất cả bộ nhớ cache cùng một lúc và hy vọng xây dựng lại sạch" không?
- Tôi có thể chặn các yêu cầu http trong khi việc xóa bộ nhớ cache đang diễn ra để apache không bị tắc với một loạt các yêu cầu đóng dấu bộ đệm không?
- Nếu tôi có thể xóa bộ nhớ cache bên ngoài yêu cầu Drupal / httpd bình thường, có lẽ tôi có thể đặt bộ nhớ PHP_limit cao hơn cho hoạt động xóa bộ nhớ cache và tắt bộ nhớ chung_limit của tôi (ngay bây giờ được đặt thành 256MB, trong trường hợp bất kỳ luồng httpd riêng lẻ nào cũng cần xóa bộ nhớ cache ...).
Về cơ bản: Có cách nào thông minh và duyên dáng để xóa tất cả bộ nhớ cache với Drupal ngoài việc chỉ cần nhấp vào nút trong giao diện người dùng hoặc sử dụng drush cc all
không?
[ Chỉnh sửa để làm rõ : Vấn đề chính tôi gặp phải là xây dựng lại bộ đệm , trong đó (a) mất một lúc và (b) chặn tất cả các yêu cầu khác cho đến khi quá trình xây dựng lại hoàn tất. Tôi muốn tìm một cách để làm cho nó để việc xây dựng lại không hoàn toàn nguy hiểm trong thời gian lưu lượng truy cập cao.]