人们一直声称我的网站总是挂在某些页面上。我检查了unicorn stderr日志,发现了许多超时错误,如:
E, [2013-08-14T09:27:32.236478 #30027] ERROR -- : worker=5 PID:11619 timeout (601s > 600s), killing
E, [2013-08-14T09:27:32.252252 #30027] ERROR -- : reaped #<Process::Status: pid=11619,signaled(SIGKILL=9)> worker=5
I, [2013-08-14T09:27:32.266141 #4720] INFO -- : worker=5 ready
有很多类似的错误消息。
然后我转到rails生产日志,通过搜索独角兽错误时间减去601s来找到确切的请求。这些超时请求都在页面呈现阶段被阻塞。这些请求的sql已经完成。它永远不会结束:
Processing by XXXController#index as HTML
Rendered xxx/index.html.erb within layouts/application (41.4ms)
Rendered shared/_sidebar.html.erb (200.9ms)
不完整。大多数这些请求都成功提供。我不知道为什么在随机时间,它会在那里停留。
我不知道是什么原因引起的。谁能给我一个线索,告诉我如何找到导致独角兽工人超时的真正原因?
更新
我们使用NSC将请求和响应转移到独角兽。为了尝试改善超时问题,我们在NSC和unicorn之间添加了nginx。事实证明,unicorn工作者超时仍然发生,并且每个超时都与nginx错误日志中的nginx上游超时相匹配。
有谁知道独角兽的TCP连接中是否有某种瓶颈?
答案 0 :(得分:1)
我正在使用Rack :: Timeout在独角兽之前超时。 Unicorn超时使用kill -9,我认为这不会让你做任何事情。