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

Высокая нагрузка на сервер Centos / MySQL

В настоящее время у меня есть веб-сайт, который посещают примерно 15-20 000 человек в день. В настоящее время у нас есть очень активный форум, который размещается с использованием программного обеспечения Vbulletin. У нас 4,5 миллиона сообщений, 80 000 тем, около 11 000 участников, из которых почти треть активна постоянно. Теперь я использую Intel Xeon Quad Core (2,13 ГГц) с 4 ГБ ОЗУ, Centos 5.5 и запускаю DirectAdmin на коробке для управления им. Я также использую текущую стабильную версию Apache, MySQL и php. Это единственный сайт, размещенный на этой машине. Теперь в случайное время суток, иногда, когда он загружен, нагрузка на сервер может доходить до 20, но это также может произойти, когда у нас есть только около 200 активных пользователей. Я не понимаю, что вызывает эти проблемы. Иногда я получаю страницы, которые могут быть созданы за 0,2 секунды, в других случаях это занимает 5-8 секунд. Я настроил файл my.cnf, и это ничего не помогло, я не знал, куда еще обратиться, поэтому, если у кого-то есть предложения, дайте мне знать.

У вас есть авторизация на месте:
К сожалению, многие люди часто забывают смотреть логи, чтобы разобраться в своей проблеме.

Я бы начал с базового набора инструментов для мониторинга, регистрации и диагностики.

  1. верхняя
  2. mtop http://mtop.sourceforge.net
  3. Innotop http://innotop.sourceforge.net
  4. Список процессов MySQL / mysqladmin proc
  5. MySQLTuner http://mysqltuner.pl
  6. MySQLidxchk: http://hackmysql.com/scripts/mysqlidxchk-1.1 (отлично подходит для анализа журналов)
  7. MySQLSLA - отчет о состоянии MySQL: http://hackmysql.com/scripts/mysqlsla
  8. MySQLReport - http: // hackmysql.com/scripts/mysqlreport (отличная утилита, которая интерпретирует значения MySQL SHOW STATUS в подробный отчет о том, как работает MySQL
  9. IOTOP / SAR
  10. Вы уверены, что весь трафик - это действительный трафик? может захотеть дважды проверить журналы и убедиться, что трафик действителен.
  11. Все соединения - несколько с одних и тех же IP-адресов? (чаще, чем обычно) используйте это, чтобы проверить, сколько соединений поступает с 1 ip: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  12. Вы также можете поработать с Mod_Evasive
  13. В зависимости от ваших выводов - переместите MySQL на другой сервер
  14. Подумайте о балансировщике нагрузки - или Nginx, или о переходе от решения веб-хостинга Apache к другому, например Cherokee, Nginx и т. Д.

Если этот пост вам помог - почему бы вам не проголосовать за него :-) Благословения

Еще несколько вещей в дополнение к превосходному списку Гленна:

  • Отметьте «верхний» и «свободный», чтобы убедиться, что вы не используете память подкачки, так как это снизит вашу производительность. Если вы обнаружите, что начинаете использовать swap, уменьшите требования к памяти Apache (в основном уменьшите MaxClients) и MySQL (все различные параметры кеширования / буфера).
  • Если форум - это PHP, убедитесь, что вы используете кеш опкодов, например eAccelerator или APC.
  • Подумайте о том, чтобы проверить производительность сайта, используя что-то вроде ab или siege. Это даст вам информацию о текущих возможностях вашего сервера и позволит вам протестировать эффект от конкретных оптимизаций.
  • Используйте верхнюю часть, чтобы увидеть, какие приложения загружают процессор в часы пик. Это даст вам общее представление о том, с чего начать оптимизацию.
  • Если вы обслуживаете много статического контента, подумайте об использовании для этого более легкого веб-сервера (например, lighttpd или nginx).
  • Проверьте статистику журнала запросов в MySQL, чтобы убедиться, что он включен и работает нормально. Если вы получаете много "LOW MEM Prunes", подумайте об использовании большего объема памяти для кеша, если можете.
  • Вы можете добиться максимальной производительности, если выделите больше памяти MySQL, чем Apache. В идеале вы хотите, чтобы ваш активный набор записей мог полностью храниться в ОЗУ, что минимизирует доступ к диску. Это не общий размер базы данных, а просто размер всех записей, которые обычно читаются каждый день. На машине с 4 ГБ я бы удостоверился, что MySQL получает в целом не менее 1 ГБ.
  • Имейте в виду, что трафик обычно идет скачкообразно, и вашему серверу необходимо обрабатывать не только среднюю скорость трафика, но и пики трафика. Не попадайте в ситуацию, когда ваша установка может просто обрабатывать средний трафик, но начинает отставать, когда трафик достигает пиков / скачков. Тогда вы окажетесь в ситуации, когда сервер изо всех сил пытается не отставать, но продолжает становиться все более и более перегруженным.

По моему собственному опыту, вашего сервера «должно хватить» для поддержки сайта с 20 тысячами просмотров в день с хорошей конфигурацией и некоторыми оптимизационными настройками. Я не удивлюсь, если вы теоретически сможете получить в 10 раз больше, если потрудитесь.