Почему несколько процессов Ruby на сервере EC2 вызывают 100% загрузку ЦП?

У меня есть приложение Rails, которое большую часть времени использует 100% ЦП. Я не могу понять, почему такая большая нагрузка на сервер. Я использую веб-сервер Puma с конфигурацией по умолчанию и запускаю несколько фоновых заданий с помощью выталкивания драгоценный камень. Есть 7 файлов, которые используют задания на вырубку с 5 рабочими:

include SuckerPunch::Job 
workers 5

Я выполнил запрос top -i и обнаружил следующие процессы, работающие на сервере. Я вижу несколько команд Ruby на сервере. Может кто-нибудь сказать мне, это нормальное поведение на сервере, или что-то не так?

вывод верхней команды


person Bloomberg    schedule 25.08.2018    source источник
comment
Я не уверен, какой сервер приложений вы используете и его конфигурацию. Я думаю у вас на много рабочих настроено. Вы должны предоставить больше информации о сервере приложений (puma? пассажир? единорог?)   -  person arieljuod    schedule 25.08.2018
comment
Я использую сервер приложений Puma, а также использую гем Sucker Punch для нескольких фоновых заданий.   -  person Bloomberg    schedule 25.08.2018
comment
Итак, какой конфиг у Puma? сколько рабочих вы используете? а как насчет конфига sucker_punch? Кажется, у вас слишком много рабочих на обоих   -  person arieljuod    schedule 25.08.2018
comment
Я использую конфигурацию PUMA по умолчанию на сервере AWS EC2 и конфигурацию по умолчанию. Но есть 7 файлов, на которых используется работа с присосками с 5 рабочими в каждом. Я добавил детали самого вопроса для лучшей читабельности   -  person Bloomberg    schedule 25.08.2018
comment
запустить top -c, он добавляет столбец с дополнительной информацией о команде, которая создала каждый процесс   -  person arieljuod    schedule 25.08.2018


Ответы (1)


Некоторые способы уменьшить конкуренцию за ресурсы

Загрузка вашего пользовательского пространства высока (~ 48%), поэтому вы, вероятно, захотите уменьшить количество рабочих процессов в своем веб-приложении, увеличить количество процессоров, доступных в вашем экземпляре, перейти на версию Ruby с лучшим параллелизмом и реальная многоядерная поддержка (например, Rubinius или JRuby) или некоторая комбинация этих вариантов. В зависимости от того, что на самом деле делает ваш код, вам также может понадобиться изменить архитектуру вашего приложения, чтобы разгрузить дорогостоящие операции ввода-вывода с сервера приложений.

Кроме того, ваше время кражи довольно велико (~ 41%), поэтому ваш инстанс EC2, вероятно, перегружен. Простое перемещение вашего приложения в менее загруженный экземпляр может высвободить достаточно ресурсов, чтобы сократить время ожидания приложения.

person Todd A. Jacobs    schedule 25.08.2018
comment
Спасибо, Тодд. Ваше понимание пользовательского пространства и кражи времени помогло найти направление, которое уменьшило загрузку ЦП. - person Bloomberg; 29.08.2018