Do the RpcTask task methods end up using ruby threads to do their
work? That call_async method definitely sounds suspiciously like it
might.
I've found that ruby threads under mongrel (although I don't think it's
neccesarily an issue specific to mongrel) sometimes block when you don't
think they ought to be, or end up in wait state for long periods when it
doesn't seem like they ought to be.
When I have actual control over my ruby threads, I've found that
explicitly setting the thread priority of 'background' threads to be
lower than 0 generally frees things up. If RpcTask is creating threads
and you don't want to hack it's code to set thread priorities... is
there a synchronous method you can use instead of call_async to make
your rpc?
Jonathan
Thomas Allen wrote:
Hi Everyone,
I'm running a Rails site on Mongrel and I can't figure out why a
particular type of request ties up Mongrel easily. The requests that
tie up Mongrel call an XML-RPC server like so:
# In the controller
def site_start
if params[:id]
@site = Site.find(params[:id])
@site.site_start
render :json=>{:success=>true}
end
end
# In the model
def site_start
RpcTask.manage(self, 'start')
end
# In RpcTask
def manage(site, task)
run('manage_task', {
:site => site.name,
:site_id => site.id,
:task => task
})
end
# which calls
def run(task, task_params = {})
begin
server = XMLRPC::Client.new2('http://localhost:9192/')
result = server.call_async(task,task_params)
return result
rescue XMLRPC::FaultException => err
logger = ActiveRecord::Base.logger
logger.error(err.faultCode)
logger.error(err.faultString)
logger.error(result)
end
false
end
If I call the model method directly from the console, the RPC side
responds very quickly:
start = Time.now; Site.first.site_start; (Time.now - start).to_s
=> "0.493253"
Removing the body of RpcTask.run results in comparable performance.
Also, by switching from a single mongrel to a four-mongrel cluster, I
was able to get the these actions to perform acceptably but I imagine
that I'm doing something very wrong here to require so much power. Any
ideas?
Thanks,
Thomas Allen
_______________________________________________
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users
_______________________________________________
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users