Использование бога только для убийства

Я обслуживаю свое программное обеспечение с помощью пассажира. Он генерирует много рубиновых процессов.

Иногда один из этих рубинов раздувается, и я хочу, чтобы он умер.

Я надеялся использовать Бога для этого намерения. Моя идея состояла в том, чтобы следить за всеми этими рубинами, и если он потребляет более 500 МБ памяти в течение 3 циклов, бог должен попытаться его грациозно убить. Если он остается живым более 5 минут, тогда бог должен убить его не изящно.

Мне кажется, что бог всегда пытается снова запустить службу, поэтому он заставляет нас предоставить команду запуска. Можно ли использовать бога только для того, чтобы убить плохие поведенческие процессы и позволить летчику вернуть их, если нужно, в случае необходимости?

Ответ 1

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

в основном, вот как это работает:

  • настроить Бога для мониторинга процесса, это может быть что угодно: от apache, пассажира, mongrel или просто простого файла, выполняющего долговременную задачу.
  • Установить условные обозначения в файле конфигурации Бога, на основе которого бог выполнит некоторый предопределенный код.

вот простой пример (взятый из docs). рассмотрите этот процесс как долго выполняющийся файл, который работает некорректно, что мы хотим отслеживать для использования в памяти, позволяет называть его simple.rb

loop do
  puts 'Hello'
  sleep 1
end

теперь мы устанавливаем gem god и настраиваем его как запущенный как суперпользователь, чтобы он мог убивать/запускать процессы и затем создавать файл конфигурации. пример (также взятый из docs):

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive(:memory_max => 500.megabytes)
end

Здесь, поскольку у вас может возникнуть идея, что использование памяти процесса превышает 500 мегабайт, бог перезапустит ее. вот несколько ресурсов, которые могут помочь, если вы начинаете с управления процессами с помощью god gem:

Теперь, пожалуйста, помните, что конфигурация ALL для god - это действительно юридический код ruby, чтобы вы могли стать творческим и делать всевозможные вещи.

Наконец, если вы часто находите, что выполняете длительный процесс, я советую вам попробовать JRuby, который работает намного лучше с длинными запущенные процессы из-за JVM и LOT быстрее, чем МРТ

Ответ 2

Я использую одну и ту же настройку для многих своих проектов и имею те же проблемы с утечкой памяти. После беспорядка с мониторингом мы решили использовать функции пассажира, чтобы справиться с этим. В частности, он позволяет настроить (например,) PassengerMaxRequests 300, который закрывает любой экземпляр, когда он обслуживал это количество запросов.

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