25

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

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

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

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

ответ

42

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

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

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

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

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

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

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

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

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

Я надеюсь, что помогает.

+0

Благодарим вас за проницательный ответ и время, которое вы вложили в это. Мне это очень полезно! – emrass

+0

@ blackbird07 Приветствую вас, я рад, что смог помочь вам. Удачи в оптимизации памяти. –

Смежные вопросы