Как улучшить производительность моего сайта 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 заключается в том, что он обеспечивает большой доступ к БД для каждой загрузки страницы и полностью перезагружает каждую страницу.