Я размещаю на своем сервере приложение PHP / MySQL с кешированием Smarty. Он регулярно получает короткие всплески трафика через твиты тысячам подписчиков. Пик трафика достигает 6 ударов в секунду на период до 20-30 минут. А позже сокращается до менее одного удара в секунду. Во время всплесков время отклика становится очень плохим и достигает более двух минут для обслуживания страницы.
Как мне с этим справиться? Как мне узнать, что является узким местом на моем сервере? У меня есть сервер с оперативной памятью 1 ГБ, размещенный в облаке, с скачком ЦП. Стоит ли покупать больше процессора или больше оперативной памяти?
Пик трафика достигает 6 ударов в секунду на протяжении 20-30 минут.
Если вы считаете, что 6 ударов в секунду - это всплеск, вам нужна проверка на реальность. Я считаю, что 6 ударов в секунду - это ситуация с нулевой нагрузкой.
Во время пиков время отклика становится очень плохим и достигает более двух минут, чтобы страница была обслужена.
Плохое программирование или очень плохой сервер размером меньше моего мобильного телефона.
У меня есть сервер с оперативной памятью 1 ГБ, размещенный в облаке, с скачком ЦП. Стоит ли покупать больше процессора или больше оперативной памяти?
Выясните это. По сути, я бы начал говорить вам, что на то, что для начала имеет 6 ударов в секунду, не может потребоваться несколько минут, несмотря на очень необычные обстоятельства. Возможно, вы пропустили индекс и заставили MySQL все время сканировать таблицы. Я лично был бы очень обеспокоен, если бы не смог обработать 6 запросов в секунду на одном ядре виртуальной машины, в значительной степени независимо от того, насколько оно велико. Или - грубо говоря: я ожидал, что мой телефон сделает это. В прошлый раз, когда я делал большой веб-сайт, мы считали 30 мс предельным временем обработки. Это будет означать более 30 запросов в секунду на ядро.
В противном случае вам нужно выяснить - если ваш процессор действительно скачивает, вам нужно больше процессора, если оперативной памяти будет недостаточно и она будет отправлена на диск, тогда процессор не будет полностью загружен. Но опять же, это звучит так: «Моя машина едет только со скоростью 30 км / ч, пожалуйста, скажите мне, что настроить дальше», в то время как машина ДОЛЖНА ехать намного быстрее. Это действительно больше похоже на плохое программирование с самого начала.
Чтобы попытаться ответить на ваш вопрос, вам нужно лучше понять, что вызывает это замедление. Вот несколько вещей, на которые вы можете обратить внимание:
у вас есть медленные запросы mysql во время всплесков? (посмотрите на свой медленный журнал mysql)
сколько процессов apache (если вы используете apache) у вас одновременно запущено во время этих всплесков (см. ps aux | grep apache | wc -l
) и как это соотносится с настройкой maxclient?
насколько велик каждый процесс apache?
вы смотрели на top
?
сколько оперативной памяти использует mysql? (если у вас есть phpmyadmin, посмотрите статус вашего сервера)
Больше оперативной памяти, безусловно! 6 ударов в секунду - не так уж и много с точки зрения вычислений. Даже не зная специфики вашей рабочей нагрузки, 1 ГБ памяти почти наверняка является вашим узким местом.