我在同一台服务器上运行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有帮助吗?
感谢任何指导!
答案 0 :(得分:0)
您需要使用FastCGI技术。
您还需要在星号中使用CURL函数而不是系统应用程序。
每次调用System都会创建shell和fork new proccess。
也可以通过AMI而不是dooign CURL来检查星号事件。