Я також останнім часом бив головою об стіну, коли проблеми з пам'яттю Drupal. Ось мої зібрані знання з теми:
1. Перегляди (можуть) використовують багато пам'яті
Мені подобаються деякі погляди (і Панелі, і CTools, і все, що merlinofchaos зачіпає його могутніми, могутніми пальцями), але можливо створити конфігурації з декількома відносинами, які використовують багато пам'яті. Якщо ви вимкнете перегляд і проблема з пам’яттю відміняється, це, ймовірно, погано сконструйоване подання, яке спричиняє проблему.
Що робити, якщо це Перегляд, і вам справді потрібен цей Вид для роботи? Спробуйте ввести його в код (через груповий експортер або функції; див. Нижче. Я вручну кодував функцію, схожу на представлення, щоб покращити продуктивність з дуже невеликим успіхом) для початку. Інша думка полягає в тому, щоб переглянути Перегляд іншим способом - якщо в кінцевому підсумку те, що ви отримуєте, це терміни таксономії, переконайтесь, що тип Погляду є поданням таксономії при його створенні; не створюйте Перегляд вмісту, який використовує взаємозв'язки, щоб визначити умови таксономії.
Тут також варто зазначити, що Панелі також нібито використовують багато пам’яті - я не дуже орієнтувався на це, тому не можу це підтвердити.
2. Переміщення матеріалів із бази даних в код - дуже хороша практика
Мені знадобилося кілька сайтів Drupal, щоб усвідомити це, але зберігати все, що створено за допомогою інтерфейсу користувача, в базі даних (особливо конфігурації панелей та панелей) - найгірша практика для Drupal. Чому? Це збільшує навантаження на базу даних і не може контролюватися версіями. Перший момент є особливо проблематичним щодо використання пам'яті - замість того, щоб просто завантажувати вміст із представлення даних із бази даних, сайт також повинен завантажувати самі компоненти перегляду. Це посилюється тим, як Drupal використовує таблиці: абстрагуючи все до п ятого ступеня, кожен біт функціональності Drupal використовує нову таблицю, в результаті чого деякі запити об'єднуються в мільярд таблиць разом. Це дає грижі людям з інформатики (застереження: посилання нерозумно), але насправді цього не можна уникнути за допомогою програмного забезпечення, такого як модульне та зручне для користувачів, як і Drupal.
Рішення? Використовуйте Bulk Exporter (в комплекті з CTools) або Особливості, щоб упакувати біти коду, що наразі перебувають у базі даних, як код модуля.
3. Теми також можуть їсти пам’ять
Чи є у вашій темі багато файлів шаблонів (тобто файли в імені теми / шаблони /)? Якщо так, пам'ять споживається щоразу, коли один із цих файлів завантажується. Якщо ви створюєте шаблони спеціально для того, щоб призупинити показ бітів Drupal, спробуйте:
- Зміна дозволів, щоб біт не відображався для певних ролей користувача, які не є адміністратором.
- Використання CSS для приховування елементів.
Перший вибір - це, очевидно, те, що ви хочете зробити для речей, що впливають на безпеку - ви не хочете використовувати CSS для приховування кнопки "редагування" для певних користувачів, лише щоб вони потім приховували її через Firebug чи будь-що інше.
4. Не перебирайте за борт модулів для внесків
Хоча іноді для сайту потрібна велика кількість модулів для надсилання повідомлень, не перебирайте за борт. Кожен увімкнутий (примітка: увімкнено. Відключені модулі не використовують жодної пам'яті) модуль використовує пам'ять. Це трохи очевидно, але варто відзначити незалежно.
5. VPS - це (іноді) брехня
На мій досвід, деякі недобросовісні хостингові компанії люблять намагатися підштовхнути сайти Drupal до серверів VPS - вони дорожчі, і це звільняє спільний хостинг для все більшої кількості веб-сайтів WordPress. Ситуація погіршується тим, що веб-хости часто не рекламують (або навіть охоче розповідають, якщо їх запитують), який верхній ліміт пам’яті для спільного хостингу.
На жаль, часто, якщо сайт не перебуває під інтенсивним трафіком і все ще виходить з ладу, проблема, ймовірно, має більше спільного з налаштуваннями Drupal, ніж будь-що інше. Натискання користувача на VPS просто замулює води та додає більше змінних для вирішення (Чи це конфігурація веб-сервера? Конфігурація PHP? Конфігурація гостя VPS? Конфігурація хоста VPS, навіть?).
6. Коли все інше не вдається, клонуйте до місцевого господаря і побийте його палицею
Це велика причина, чому люди використовують методологію розробки виробничих процесів з контролем версій - коли все інше не вдається, ви можете зробити дамп БД, git клонувати сайт на локальний тестовий сервер, а потім по-царському зіпсувати сайт на тестування сервера, не турбуючись про те, що насправді щось зламає на виробничому сервері.
Що стосується питань пам'яті, це, як правило, означає відключення модулів один за одним, поки той, що викликає проблему, не виявиться. Це також може вказувати на проблеми, пов’язані з веб-хостами - якщо сайт працює нормально під час локальної установки з пам'яттю, встановленою на щось розумне, наприклад, 128 Мб, то ви знаєте, що ваш веб-хостинг зламався.
тл; д-р
Моя кишка полягає в тому, що це викликає проблему. Спробуйте відключити це та очистіть кеш, перевірте, чи працює він.
Я також додам до цієї відповіді, як я думаю про інші речі, щоб спробувати ...