Назад | Перейти на главную страницу

Как мне улучшить производительность моего сайта Drupal с большим количеством одновременных пользователей?

У меня есть сайт Drupal, который при запуске может получить очень высокую посещаемость. Мы арендовали очень мощный сервер для первоначального запуска, после чего уменьшим масштаб. Сервер оснащен 8-ядерным процессором Xeon E5-2670 @ 2,6 ГГц и 30 ГБ оперативной памяти.

MySQL получил тонны памяти, и я подтвердил, что MySQL фактически использует эту память через «верхнюю часть»:

innodb_buffer_pool_size = 15G

PHP предоставили тонны памяти (почти наверняка слишком много сейчас, когда я заметил комментарий «на скрипт»):

memory_limit = 6000M

Конфигурация Apache является стандартной по умолчанию:

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000

Я проводил тестирование JMeter (в основном «бросайте как можно больше потоков на сайт и запрашивайте страницы как можно быстрее»), и я вижу, что производительность падает по мере увеличения количества одновременных пользователей:

Однако нагрузка на машину по-прежнему очень низкая. Во время тестирования «верх» сообщает о 26 ГБ свободной памяти, а средняя нагрузка от «аптайма» не превышает 0,63. Я подозреваю, что у нас все еще есть много ресурсов, которые мы могли бы использовать для повышения производительности, но Apache не полностью использует эти ресурсы. Тем не менее, я разработчик, а не системный администратор, и я не эксперт в области производительности серверов.

Какое улучшение я могу сделать для повышения производительности?

Ответы Drupal может быть лучше подходит для этого вопроса, но вот несколько вещей для вас:

  • По возможности используйте кеширование в Drupal И на сервере.
  • ЕСЛИ большая часть вашего трафика будет анонимной, рассмотрите возможность использования обратного прокси, например Лак. Есть модуль это помогает Drupal лучше использовать Varnish. Используйте его, если вы решили внедрить Varnish.
  • Попробуйте использовать что-то вроде кэш памяти также.
  • Если ваш сайт Drupal построен на Drupal 6, рассмотрите возможность преобразования исходного кода Drupal в Прессфлоу Друпал сайт (это несложно). Pressflow включает в себя множество оптимизаций производительности (но это спорный вопрос, если вы используете Drupal 7).

Теперь для Apache ... не используйте готовую конфигурацию Apache. Вам необходимо настроить Apache на свой сайт. Предполагая, что вы используете mod_prefork (Я бы сказал, что это довольно вероятно, но только вы можете это определить) Вот основы того, как это делается, но вам действительно следует нанять кого-то, кто знает, что делает.

  • Выясните, какой максимальный объем памяти вы хотите, чтобы Apache мог использовать.
  • Тщательно протестируйте свой веб-сайт и определите, сколько памяти использует каждый процесс Apache (используя top).
  • Возьмите процесс Apache в верхней части, который использует больше всего памяти, добавьте к нему немного для хорошей оценки, а затем разделите первое число (максимальный объем памяти, который вы хотите использовать Apache) на это новое число.
  • Номер, который вы получите, должен быть вашим MaxClients & ServerLimit переменные.

Это, конечно, не окончательный ответ. Настройка сервера требует времени и опыта. Удачи.

Есть несколько модулей (Boost, Varnish и т. Д.), Которые могут помочь вам улучшить ситуацию, если у вас в основном анонимные пользователи. Однако они не так сильно вам помогут, если пользователи создают профили на вашем сайте и входят в систему.

Вот как я настраиваю серверы для Drupal:

  • Отключите модуль диспетчера обновлений. Это замедляет работу вашего сайта.
  • Я заменил Apache на Nginx и phpfpm. Вероятно, вам потребуется установить и настроить это самостоятельно. Несмотря на то, что я не проводил «формальных» тестов, у меня сложилось впечатление, что Nginx + phpfpm быстрее обрабатывает запросы. Вот конфигурация для Nginx и Drupal.
  • Оптимизируйте таблицы MySQL и InnoDB. Увидеть Блог о производительности MySQL.

Возможно, будет много мелких улучшений, которые могут продвинуться дальше, но я думаю, что это может быть по крайней мере отправной точкой для изучения.

Обналичьте все статические страницы, часто используемые страницы, меню и гиперссылки с помощью инструмента кэширования, такого как memcache. Проблема с Drupal заключается в том, что он делает много обращений к БД для каждой загрузки страницы и полностью перезагружает каждую страницу.