2016-07-06 3 views
2

Я делаю онлайн-браузер с веб-разъемами и сервером узлов, и если у меня около 20-30 игроков, то, как правило, процессор составляет около 2%, а оперативная память - 10-15%. Я просто использую дешевую капельку Digital Ocean для ее размещения.Узел сервера случайным образом всплески до 100%, а затем сбой. Как диагностировать?

Однако, каждые 20-30 минут кажется, что использование центрального процессора сервера будет увеличиваться до 100% в течение 10 секунд, а затем, наконец, сбой. До этого момента процессор обычно колеблется около 2%, и игра работает очень плавно.

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

Есть также несколько небольших шипов, которые не приводят сервер вниз, но вскоре разрешают себя. Вот изображение:

http://i.imgur.com/EH3o8ue.png

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

Что я могу сделать, чтобы рассказать об этом и узнать, с чего начать, как исследовать причины этих всплесков? Я хотел бы представить, что есть некоторый код, о котором я забыл, что на удивление медленнее под нагрузкой или, может быть, мне не хватает флага узла, который бы разрешил его, но я не знаю.

+0

Вы проверили это http://techblog.netflix.com/2014/11/nodejs-in-flames.html? или это http://stackoverflow.com/questions/13375735/node-js-cpu-100/13376256#13376256? Можете ли вы подтвердить загрузку из процесса узла через верх или что-то вроде? –

+0

@ mh-cbon: верхний подтвердил, что все было от узла. –

+0

Вы считали, что взглянули на newrelic? Может помочь. –

ответ

1

Думаю, я мог бы это понять.

Я использую в основном веб-сайты для своей игры, и я запускал htop и заметил, что если кто-то отправляет большие пакеты (выполняя тонну действий за короткий промежуток времени), тогда процессор скапливается до 100%. Мне было интересно, почему это произошло, когда я вспомнил, что использовал binary-packer для уменьшения использования полосы пропускания.

Я попытался изменить парсер на JSON вместо этого, чтобы не сжимать и не упаковывать пакеты, и независимо от того, насколько большими были затраты на процессор, осталось 2% всего времени.

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

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

Единственная проблема заключается в том, что с кодировкой JSON пользователи могут читать пакеты на вкладке сети консоли разработчика Chrome, которые мне не нравятся. Делает это намного проще, чтобы узнать, как работает игра и потенциально найти читы/эксплуатация ..