Вопрос или проблема
Итак, у меня есть виртуальный сервер WordPress в Digitalocean с 4 общими vcpu и 8 ГБ оперативной памяти. Всё работало очень хорошо, пока на сайт не зашло около 400 пользователей одновременно, тогда он стал ОЧЕНЬ МЕДЛИТЕЛЬНЫМ. Но моя оперативная память и процессор загружены всего на 40%.
Сейчас, когда я публикую этот вопрос, когда в сети 20-40 человек, всё работает нормально. Но когда на сайте около 400 человек, он загружается очень медленно – но память и процессор загружены на 40%.
Кто-нибудь знает, в чем может быть проблема и как это решить?
Может быть, это проблема с настройками MySQL? Или что-то другое?
URL моего сайта: https://aulas.minhasplantas.com.br/
Вот мой терминал, когда я запускаю top:
А вот iotop
(Это мнение и субъективный ответ, так как ваш вопрос включает множество факторов и не содержит подробной информации о ситуации)
Вы, возможно, подходите к тому моменту, когда у вас достаточно объема, чтобы вам потребовалась более профессиональная оптимизация сервера, или вам нужно изучить более продвинутое администрирование сервера.
Если у вас нет ограничений по процессору или оперативной памяти, значит, у вас ограничение по диску – вероятно, доступ к диску MySQL, но это могут быть и другие проблемы. Процесс не имеет высокой загрузки, если он ждёт чтения с диска. Вы можете продолжать увеличивать мощность процессора и оперативной памяти, но это не ускорит диск, поэтому это не приведет к разнице, тем более процентная загрузка процессора/ОП снизится, не увеличивая скорость работы сервера. Ознакомьтесь с ответами подобными этим для диагностики, кроме процессора и оперативной памяти, но обратите внимание, что это, вероятно, MySQL, и вам стоит сосредоточиться на этом в первую очередь.
Быстрые действия в данной ситуации:
- Поскольку 90%* проблем скорости WordPress связаны с большими или плохо написанными запросами к базе данных, вам следует сначала посмотреть на базу данных.
- Используйте Query Monitor, чтобы попытаться выяснить, есть ли у вас конкретные запросы, которые создают нагрузку. Задержки, показанные здесь, будут более выраженными и заметными, когда ваш сайт будет под нагрузкой.
- В общем, это относительно простая задача, которая даст вам улучшения в производительности и управляемости, если вы переместите MySQL на отдельный сервер. Это позволит вам масштабировать MySQL независимо от apache/php. Это, вероятно, то, что вам следует сделать в первую очередь.
- Попробуйте ускорить доступ к диску с помощью простых решений, например, ваш диск SSD?
- Если это не MySQL, возможно, у вас есть плагин или другой код, который выполняет большой объём операций с диском, и вам нужно как-то его оптимизировать.
Медленные победы
Вещи, которые занимают больше времени, но сделают вас лучше в администрировании сервера:
- Станьте более знакомыми с htop и такими инструментами, как iotop, чтобы увидеть, что происходит на вашем сервере.
- Предполагая, что проблема в MySQL, выясните, как включить журнал медленных запросов, чтобы вы могли получать обратную связь и в будущем снова видеть, где узкие места, когда все замедляется.
- Да, существует множество настроек для оптимизации в MySQL. Как только вы узнаете немного больше о происходящем (например, исключите действительно плохие запросы, которые сможете исправить), опубликуйте в месте с более специфической экспертизой MySQL для получения помощи.
- Когда вы узнаете немного больше, опубликуйте о том, что происходит, например, на serverfault, где вы получите более конкретные советы по оптимизации.
У меня была такая же проблема, когда сайт на WordPress был чрезвычайно медленным. Выяснилось, что отключение встроенного файрвола DigitalOcean перед Droplet оказало значительно положительное влияние.
После этого я включил fpm и http2 для apache2
sudo apt-get install php-fpm -y
sudo a2enconf php8.1-fpm
sudo a2enmod http2
a2enmod proxy_fcgi
systemctl restart apache2
А затем я добавил плагин кэширования на WordPress.
Но главной проблемой был файрвол. Будьте осторожны, чтобы не заменить любые правила, которые вы хотели бы установить через хостовый файрвол, такой как iptables.
Ответ или решение
Почему ваш сайт на WordPress на DigitalOcean загружается медленно при высокой нагрузке и как это исправить
Если ваш сайт на WordPress, размещенный на платформе DigitalOcean, демонстрирует медленную загрузку при увеличении трафика, это может стать серьезной проблемой. Учитывая, что у вас есть 4 виртуальных процессора и 8 Гб оперативной памяти, а загрузка ЦП и ОЗУ составляет 40%, это указывает на то, что проблема может быть связана с другими факторами, такими как доступ к диску или неправильные настройки баз данных. Давайте разберем возможные причины и решения.
Возможные причины медленной загрузки
-
Проблемы с MySQL: В большинстве случаев замедление работы WordPress связано с тяжелыми или неэффективными запросами к базе данных. Стандартные настройки MySQL могут не подходить для вашего объема трафика, особенно если много пользователей одновременно обращается к базе данных.
-
Диск (I/O Bottleneck): Если ваш сервер работает не с SSD-дисками или если есть проблемы с I/O, это может приводить к ожиданию процессов. Это может быть основная причина, почему загрузка не увеличивается, даже если ЦП и ОЗУ загружены на 40%.
-
Конфигурация веб-сервера: Неправильно настроенные параметры вашего веб-сервера (например, Apache или Nginx) также могут влиять на производительность. Наличие большого количества активных соединений требует более эффективного управления.
-
Фаервол: Использование DigitalOcean фаервола может создать дополнительные задержки, особенно если он неправильно настроен и блокирует значительные части трафика.
Рекомендации по оптимизации
Быстрые решения
-
Анализ запросов к базе данных:
- Установите и используйте плагин Query Monitor для анализа запросов, которые могут сильно нагружать базу данных. Существует вероятность, что определенные запросы становятся узким местом.
-
Настройте отдельный сервер для MySQL: Если ваш трафик продолжает расти, рассмотреть перенос MySQL на отдельный сервер для разделения нагрузки. Это позволит масштабировать MySQL независимо от вашего веб-сервера.
-
Используйте SSD-диски: Если вы используете HDD, переключитесь на SSD, чтобы улучшить скорость доступа к данным. Это может значительно снизить задержки при высоком нагрузочном трафике.
-
Настройка PHP-FPM и HTTP/2:
- Убедитесь, что вы используете PHP-FPM и включили HTTP/2 в вашем сервере Apache или Nginx. Это может существенно улучшить скорость ответа вашего сервера.
- Включите следующие модули:
sudo apt-get install php-fpm -y sudo a2enconf php8.1-fpm sudo a2enmod http2 sudo a2enmod proxy_fcgi systemctl restart apache2
Долгосрочные решения
-
Мониторинг производительности:
- Используйте инструменты, такие как
htop
иiotop
, для понимания того, какие процессы используют ресурсы в вашем сервере. Это поможет вам проанализировать и определить узкие места.
- Используйте инструменты, такие как
-
Включение журнала медленных запросов MySQL:
- Включите журнал медленных запросов в MySQL, чтобы отслеживать и анализировать SQL-запросы, которые вызывают задержки.
-
Оптимизация MySQL:
- После анализа запросов рассмотрите возможность изменения параметров конфигурации MySQL в файле
my.cnf
. Например, увеличьте значенияkey_buffer_size
,query_cache_size
, и другие параметры, которые могут помочь улучшить производительность.
- После анализа запросов рассмотрите возможность изменения параметров конфигурации MySQL в файле
-
Кеширование:
- Установите плагин кэширования, такой как W3 Total Cache или WP Super Cache, чтобы уменьшить нагрузку на сервер и улучшить время загрузки страниц.
Заключение
Проблемы с производительностью вашего сайта на WordPress под нагрузкой могут зависеть от множества различных факторов. Подходите к диагностике и исправлению системно: анализируйте, настраивайте, оптимизируйте и тестируйте ваш сервер и базу данных. Регулярный мониторинг и оптимизация помогут не только устранить текущие проблемы, но и предотвратить их возникновение в будущем, когда ваш сайт будет расти и развиваться.