Phusion乘客spawner rails应用程序导致高CPU使用率

时间:2012-05-08 03:39:04

标签: ruby-on-rails passenger asterisk phusion

我在同一台服务器上运行Asterisk和Rails应用程序。通过Asterisk进行的所有入站呼叫都会触发rails应用程序控制器的“卷曲”以启动juggernaut发布,从而实现对单个登录用户的入站呼叫的实时推送(显示呼叫者个人资料详细信息的弹出式对话框)。

问题是,当呼叫开始进入时,rails应用程序的Passenger Spawner的CPU使用率几乎达到100%。每个入站电话都会运行:

  

/ usr / bin / curl http://parlo.local/asterisk/inbound_call?exten=8405&src_num=921187888&recordingfilename=q70001-20

在星号控制器中:

def inbound_call
  if params[:src_num].length > 6
    extension = AsteriskUserextension.find_by_extension(params[:exten])
    if extension.present? && extension.user.present?
      @user = extension.user
      customer = Customer.first_match(params[:src_num]).first
      customer_name = customer.present? ? customer.full_name : "Unknown Caller"
      queue = AsteriskQueue.find_by_name(params[:queue])
      @result = Asterisk::Action.response_factory("asterisk_inbound","#{queue.try(:title)}","OK",customer.try(:id))
      publish
    end
  end
  render :nothing => true, :status => :created
end

我认为高入站呼叫率导致高CPU使用率。解决这种情况的最佳方法是什么?将所有工作推向RESQUE有帮助吗?

感谢任何指导!

1 个答案:

答案 0 :(得分:0)

您需要使用FastCGI技术。

您还需要在星号中使用CURL函数而不是系统应用程序。

每次调用System都会创建shell和fork new proccess。

也可以通过AMI而不是dooign CURL来检查星号事件。