У одного из наших клиентов имеется новостной проект, реализованный на Drupal 6. Проект большой, трудились несколько команд разработчиков. В результате долгого и упорного труда имеется следующее:
- количество нодов — 105 000
- количество блоков порядка — 5 000
- количество views — 297
- количество дисплеев views — 944
- количество включенных модулей — 317
Проект работает на debian squeeze, рабочая связка nginx + php-fpm, кэширование для анонимов boost, кэширование php - APC, кэширование в опертивной памяти - memcached с библиотекой php5-memcached.
Сервер: 2хXEON, 32ГБ оперативной памяти, диски SAS
Проблема
Основной проблемой является длительное время генерации страниц для авторизованных пользователей — 10 сек. и очень большое потребление оперативной памяти на каждом запросе к php-fpm — порядка 350 Мб.
С анонимами, проблем нет, так как используется boost. Но вот во время сброса кэша сервер буквально виснет, от большого количества запросов непосредственно на php-fpm.
Решение
Для решения этой проблемы было принято решение взять тестовый сервер и на нем начинать отладку проекта для устранения этих недостатков.
Первый шаг, который мы сделали это попробовали изменить библиотеку php для работы с memcached поставили вместо php5-memcached библиотеку php5-memcache. Этот шаг сразу же дал результаты: в среднем потребление памяти на одном запросе к php-fpm снизилось на порядка 70 Мб. и время генерации страницы уменьшилось до 6 сек.
Также неплохие результаты дало отключение модуля admin_menu - экономия порядка 60 Мб оперативной памяти и время загрузки страницы снизилось до 5 секунд, но 5 секунд это тоже много.
Далее мы начали отладку Drupal с помощью XHprof и вставку отладочных точек в код Drupal в результате наткнулись на баг в lightbox2 https://drupal.org/node/409354, который проявляется только при большом количестве пресетов imagecache (у нас их 81 ). После применения патча #49 время генерации страницы для авторизованного пользователя было снижено до 2 сек - на этом решили остановится.
В результате этих действий время генерации страницы для авторизованного пользователя составило 2 секунды, и потребление памяти стало 200 Мб.