Sidekiq任务堵塞问题
今天发现服务器上的sidekiq 线程全忙。队列里任务积累了好多。
sidekiq里的任务基本都是爬虫脚本,都需要请求外部网站。但是有些网站的响应时间或者读取时间太久,一直一直卡在那里。使得后面的任务不能执行。
所以我们就应该控制请求外部链接的读取时间,避免线程卡住。
在任务里请求外部网站有两种方式:
第一种用rest_client请求.
RestClient.post url, params
改进方法:
RestClient::Request.execute( :method => :post, :url => url, :payload => params, :timeout => 10, :open_timeout => 10 )
另一种用Nokogiri请求。
Nokogiri::HTML.parse(open(url))
改进方法:
Nokogiri::HTML.parse(open(url, :read_timeout => 10))