Единорог: какое количество рабочих процессов использовать?

Я запускаю приложение Ruby on Rails на виртуальном сервере Linux с объемом ОЗУ 1 ГБ. В настоящее время я постоянно превышаю лимит и хотел бы оптимизировать использование памяти. Один из вариантов, который я рассматриваю, - это сокращение числа рабочих-единорогов.

Итак, как лучше определить количество рабочих-единорогов?

Текущий параметр - 10 рабочих, но максимальное количество запросов в секунду, которое я видел в Google Analytics Real-Time, - 3 (оценивается только один раз в пиковое время; в 99% случаев не превышает 1 запрос в секунду).

Таким образом, это безопасное предположение, что я могу - пока - пойти с 4 работниками, оставляя место для неожиданного количества запросов? На какие показатели мне следует обратить внимание, чтобы определить количество работников, и какие инструменты я могу использовать для этого на своем компьютере с Ubuntu?

1 ответ

Решение

Количество работников, которых вы должны использовать, во многом зависит от того, что делает ваше приложение и как часто оно делает эти вещи. К сожалению, на самом деле не существует идеальной формулы отношения, которая бы работала в каждом тестовом примере. Это становится еще более верным, если принять во внимание тот факт, что у вас есть ограниченный объем ОЗУ, на котором вы должны держать свой сервер.

Многие предположат, что CPU Core Count + 1, но это тоже не правильно. Вам нужно будет выполнить контрольные тесты с разным количеством присутствующих работников и посмотреть, как идут дела. Обязательно регулярно проверяйте логи.

В нашей команде мы используем программу под названием Nagios: http://www.nagios.org/

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

Кроме того, иногда есть вещи, которые ваш сервер делает, кроме простого запуска ваших экземпляров rails, это может быть запуск сценариев или обработка информации, которая не нужна. Убедитесь, что ваш сервер не выполняет то, что ему не нужно, чтобы сэкономить как можно больше циклов ЦП и ОЗУ.

Кроме того, убедитесь, что вы реализуете эту функцию, которую имеет Unicorn, мы делаем в наших проектах, и она неоценима:

Рост памяти Когда работник использует слишком много памяти, бог или монитор может отправить ему сигнал ВЫХОДА. Это говорит работнику умереть после завершения текущего запроса. Как только рабочий умирает, мастер разветвляет новый, который мгновенно может обслуживать запросы. Таким образом, нам не нужно прерывать промежуточный запрос вашего соединения или штрафовать при запуске. - взято с: https://github.com/blog/517-unicorn

Я также нашел этот похожий вопрос, который может дать вам некоторое представление:

https://serverfault.com/q/369811/110682

Надеюсь, это поможет.

Другие вопросы по тегам