Как перезапустить мое приложение node js, когда загрузка ЦП достигает 100% на Amazon EC2 и сервер останавливается

В настоящее время я использую forever для обработки сбоев и т. д. на EC2, но я хочу каким-то образом управлять перезапуском приложения, когда загрузка процессора на сервере достигает 100%.

Сейчас это работает следующим образом: когда загрузка ЦП достигает 100%, приложение перестает работать, и если я не замечал сигналов тревоги, отправленных amazon на мою почту, приложение остается недоступным до тех пор, пока я не перезапущу вручную еще раз, используя навсегда.

Что я хочу, так это способ, когда загрузка процессора достигает 90% или выше, он перезапускает приложение, должен ли я использовать другой модуль, кроме навсегда, и если да, то какие-либо предложения?


person Karim Tarek    schedule 22.09.2014    source источник
comment
Я очень надеюсь, что вы также работаете над основной причиной 100% загрузки ЦП, потому что здесь это кажется более серьезной проблемой. Если вы просто перезапустите процесс, который вернется к 100%-ному использованию ЦП, как только он снова запустится, это не принесет вам никакой пользы.   -  person jfriend00    schedule 22.09.2014
comment
Да, вы правы, но проблема в том, что это не постоянная проблема, а просто всплески, происходящие в странные времена, например, каждые 3 или 4 дня.   -  person Karim Tarek    schedule 22.09.2014


Ответы (2)


Я рекомендую вам уменьшить использование ЦП, НО я использую аналогичные приемы, но перезапускаю, когда использование памяти слишком велико (из-за очень небольшой утечки памяти)

Вам нужен модуль "использование"

var usage       = require('usage');

потом:

CHECK_CPU_USAGE_INTERVAL    = 1000*60; // every minute
HIGH_CPU_USAGE_LIMIT        = 90; // percentage

autoRestart = setInterval(function()
{
    usage.lookup(process.pid, function(err, result) 
    {
        if(!err)
        {
            if(result.cpu > HIGH_CPU_USAGE_LIMIT)
            {
                // log
                console.log('restart due to high cpu usage');

                // restart because forever will respawn your process
                process.exit();
            }
        }
    });
}, CHECK_CPU_USAGE_INTERVAL);
person Dragu    schedule 22.09.2014
comment
К сожалению, это не сработало, потому что приложение перестает работать, когда достигает 100% загрузки процессора. - person Karim Tarek; 08.10.2014
comment
Так что вам нужно найти источник высокого потребления процессора и исправить это :) - person Dragu; 09.10.2014
comment
Есть ли у вас какие-либо идеи, чтобы помочь с этим? :) поскольку в настоящее время я понятия не имею, в чем причина проблемы. - person Karim Tarek; 09.10.2014
comment
Зависит от очень многих фактов, попробуйте найти возможный бесконечный цикл или код, который выполняет тяжелый процесс и т. д. - person Dragu; 09.10.2014
comment
@KarimTarek, если это не сработает, возможно, он переходит с 90% на 100% менее чем за минуту (период проверки) - вы можете сократить период проверки, например, до 5 секунд, и у вас больше шансов поймать и перезапуск. - person UpTheCreek; 21.11.2015

Проверьте навсегда: https://github.com/nodejitsu/forever

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

person Andrew    schedule 22.09.2014
comment
Действительно, я уже использую навсегда, но навсегда, просто не перезапускайте приложение, когда сервер достигает максимального ЦП (100%), он просто показывает, что процесс есть в постоянном списке, но приложение нет. И каждый раз, когда это происходит, мне приходится вручную перезапускать навсегда. - person Karim Tarek; 23.09.2014