2009-09-30 4 views
5

У меня есть приложение LAMP, работающее нормально, однако количество пользователей увеличивается каждый день. Однажды утром я не хочу, чтобы меня удивляло неожиданностью, и обнаружил, что все сломалось из-за перегрузки. Есть ли способ получить приблизительную оценку того, в какой емкости находится ЛАМПА?Как получить приблизительную оценку емкости приложения LAMP?

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

Так сказать, для компонента mysql, как я могу сказать, сколько еще нагрузки может потребоваться? Является ли он 30% -ной мощностью, 50%? и т.д.

То же самое для моего апача. Хотя у меня такое чувство, что БД умрет до апача.

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

ответ

3

Для текущей нагрузки есть несколько вещей, которые вы можете сделать. Самые дорогие, но наиболее подробные ответы будут предоставлены через корпоративное приложение, такое как «Гомес».

Однако, если вы хотите сделать это самостоятельно, увидеть мои предыдущие ответы ниже или использовать утилиты оболочки, такие как: Htop, сверху, ж, и использовать сервер Apache статусные

Предыдущие ответы до вопроса пересмотр:

То, о чем вы просите, иногда называют профилированием приложения.

Вам нужно создать приблизительную формулу памяти, как:

HTTPD баран + использование + процесс MySQL Использование PHP памяти = общий след запрос памяти

Вам также понадобится формула процессора, но вы также можете глазное яблоко вверх во время теста нагрузки.

У Apache есть команда 'ab'.

«ab - это инструмент для сравнения вашего сервера HTTP-протокола HTTP (Apache Hypertext Transfer Protocol). Он предназначен для того, чтобы дать вам представление о том, как выполняется ваша текущая установка Apache. Это особенно показывает количество запросов в секунду, способный служить ». http://httpd.apache.org/docs/2.0/programs/ab.html

Вот родовое «AB» тест командной строки:

ab -n 10 -c 1 http://www.yoursite.com/ 
# qty 10 total requests, 1 request at a time 

Стратегия заключается в проверке каждого процесса (пользователя) нагрузки на приложения из запроса веб-страницы через завершения. Если вы можете определить, сколько AP Apache, PHP и MySQL используют для каждого запроса, вы можете быстро определить емкость вашей системы.

Возможно, вам понадобится использовать набор диагностических инструментов, таких как vmstat или top или iostat или ps, и т. Д., Чтобы сделать снимок того, что потребует от вас количество запросов.

Наконец, вы захотите установить Xdebug.Этот инструмент поможет вам профилировать php-сторону приложения. http://xdebug.org/

Вот учебник IBM по установке Xdebug:

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/

4

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

В основном, из моего опыта в фиксируя несколько разрушающихся PHP веб-сайтов, как правило, выглядит следующим образом:

1) Люди используют MySQL

Вы можете полностью использовать MySQL, facebook и Flickr это сделать (MySQL фанаты любят те), если вы знаете Gotchas, которые:

  • Если у вас есть, не только для чтения MyISAM таблицы и любой запрос, больше, чем 100 мкс (даже выбирает) вы мертвы

На одном из сайтов, который я исправил, парень арендовал двухъядерный сервер, потому что «его сайт нуждается в мощности». Я смотрю на его сайт, я смотрю на свой предыдущий сайт с членами> 100K и торрент-трекером, который бежал на чертовском микро-половинном сервере Pizzabox Via C7, и я ему говорю, ваш сайт отлично работает на Celeron 300, который находится в моем подвал, и это даже перебор, я могу арендовать его вам за половину цены вашего Xeon, lol.

Оказалось, что парень был хороший разработчик и реальный хороший парень, но он сосал MySQL, так что его сайт был типичный поисковый запрос из ада, который может убить любой веб-сайт:

  • 10 поисковых запросов из ада в секунду (у него был как 300K членов на его незаконном сайте вареза)
  • поисковый запрос из ада занимает около 0,1 - 0,2 секунды
  • немного потока одновременных обновлений к одной и той же таблице MyISAM приправить вещи

=> полная сериализация (блокировки записи MyISAM) всех запросов. 1 ядро ​​100%, 7 ядер без нагрузки, loadavg> 1000 (да, он использовал apache), время страницы> 30 секунд, работы.

Исправление было простым: оптимизируйте поисковый запрос из ада, исправьте точку 2) ниже, переключитесь на InnoDB, переключитесь на lighttpd. loadavg упал до 0,02

2) модифицирует

Noone заинтересован в счетчиках страниц. Проблема 1 ОБНОВЛЕНИЕ для каждого просмотра страницы, и вы мертвы. Добавьте несколько MyISAM для получения дополнительных эффектов. Также убийца на InnoDB, а не о блокировке, а скорее о синхронизации IO ожидания.

3) FULLTEXT

  • MyISAM не могут быть использованы для таблиц чтения-записи из-за блокировки.
  • MyISAM так же надежен, как и ramdisk (на самом деле, меньше: вам нужно аварийное завершение ОС, чтобы повредить ramdisk, повредить таблицы MyISAM, просто нужно сбой в MySQL или просто слишком сильно ударить его одновременно, вы получите «неизвестный движок таблицы» ошибка», я видел это много раз)
  • FULLTEXT не доступен на InnoDB
  • Любые вставки в полнотекстовый индекс вызывает почти полное перестроение индекса (когда я вставил форум пост он восстанавливал 400 МБ индекса)

==> Если вам нужна полная индексация текста, производительность и надежность, используйте Sphinx или Xapian.

Я не пробовал Sphinx (люди говорят об этом хорошо), но Xapian счастливо просматривает 4 ГБ текста в мгновение ока.

4) Люди используют apache.

Это прекрасно сочетается с перечисленными выше пунктами.

В отличие от соответствующего сервера, такого как lighttpd, использование которого невозможно обнаружить (crummy Via C7 обслуживает 100 HTTP-запросов/s, а lighttpd использует менее 1% процессора), apache убьет вашу коробку.

Когда MySQL начинает умирать (он легко умирает), клиенты начинают сильно ударяться по F5, и вскоре у вас будет около 1000 процессов apache, каждый из которых имеет PHP-интерпретатор, и каждый интерпретатор PHP имеет свободное соединение MySQL, ожидая блокировка MyISAM, за исключением одного, который выполняет некоторые тривиальные UPDATE вашего счетчика просмотров страниц, но это занимает некоторое время, потому что сервер ушел на ланч-обмен, из-за 1000 apache и 1000 php и 1000 mysql-процессов.

Lighttpd не использует процессор для статических страниц. Единственный способ, чтобы lighttpd насыщал ваш процессор, - это если вы сильно ударились с apachebench, например, 20K запросов. Затем Lighttpd говорит с несколькими, как и с 10 php-fcgi бэкендами (2-4 на ядро ​​хорошо), которые говорят с несколькими соединениями MySQL. В результате все происходит намного быстрее, и когда он перегружен, он грациозно, а не взрывоопасно.

Чтобы получить исходный вопрос, вы определенно хотите просмотреть свои SQL-запросы. Добавьте журнал запросов в ваше приложение PHP, которое отображает (только для вас), список запросов и время, которое они берут, а также время от начала сценария PHP до конца (заголовок/нижний колонтитул - это хорошее место для это).

Для сложной страницы (за исключением поиска) вы ожидаете около 3 мс MySQL и 3 мс PHP, это хорошая цель. Конечно, вам нужен скомпилированный кэш кода PHP.

+1

Вы за работу на стороне? –

+0

Что вы имеете в виду? – peufeu