Rails ec2服务器上的多个ruby进程导致100%CPU利用率

时间:2018-08-25 03:30:17

标签: ruby-on-rails ruby ruby-on-rails-4 amazon-ec2

我有大多数时间都具有100%CPU使用率的Rails应用程序。 我无法弄清楚为什么服务器上的负载如此之大。我正在使用默认配置的PUMA应用程序服务器,并且正在使用sucker-punch gem运行多个后台作业。共有7个文件正在使用5名工人的吸盘打孔工作

include SuckerPunch::Job 
workers 5

我运行了top -i查询,发现服务器上正在运行以下进程。我可以在服务器上看到多个ruby命令。有人可以说出这是服务器上的这种正常行为还是出了什么问题。

enter image description here

1 个答案:

答案 0 :(得分:1)

一些减少资源争用的方法

您的用户空间负载很高(〜48%),因​​此您可能希望减少Web应用程序中的工作程序数量,增加实例上可用的CPU数量,并迁移到具有以下功能的Ruby版本:更好的并发性和真正的多核支持(例如Rubinius或JRuby),或这些选项的某种组合。根据您的代码实际执行的操作,您可能还需要重新架构应用程序,以从应用程序服务器上卸载昂贵的I / O。

此外,您的窃取时间非常长(〜41%),因此您的EC2实例可能超载了。只需将您的应用程序移至负载较小的实例,就可以释放足够的资源来减少应用程序的等待时间。