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

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

MySQL было выделено много памяти, и я подтвердил, что MySQL фактически использует эту память через "top":

innodb_buffer_pool_size = 15G

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

memory_limit = 6000M

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

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

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

  • 5 пользователей: ~1с среднее время отклика
  • 10 пользователей: ~1,3 с, среднее время отклика
  • 20 пользователей: ~2.5 с, среднее время отклика

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

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

3 ответа

Решение

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

  • Максимально используйте кеширование в Drupal AND на сервере.
  • Если большая часть вашего трафика будет анонимной, рассмотрите возможность использования обратного прокси-сервера, такого как Varnish. Есть модуль, который помогает Drupal лучше использовать Varnish. Используйте его, если решите внедрить Varnish.
  • Попробуйте использовать что-то вроде memcache.
  • Если ваш сайт Drupal построен на Drupal 6, подумайте о том, чтобы преобразовать ваш необработанный код Drupal в сайт Pressflow 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 заключается в том, что он обеспечивает большой доступ к БД для каждой загрузки страницы и полностью перезагружает каждую страницу.

Другие вопросы по тегам