Ruby Threading性能:慢Thread.pass

时间:2015-06-28 05:12:31

标签: ruby multithreading puma

我们正在运行线程ruby服务器(Puma),并且我们的Sinatra应用程序遇到了严重的性能问题。具体来说,像Thread.pass这样简单的东西可以占用2s。具有16个线程的服务器如何可以接管2s以将控制权返回给线程? Ruby调度程序是坏的,还是我们可以做些什么来解决这个问题?

详细说明:

  • Ruby实施:MRI 2.1
  • Sinatra App
  • 在Heroku 1x dynos上运行
  • Puma服务器,运行16个线程,1个进程
  • 有些路线正在做相当繁重的工作,但几乎没有工作的路线受到影响
  • 超过100MB的可用内存

提前致谢!

2 个答案:

答案 0 :(得分:0)

Thread.pass所采用的时间是非指定值,可能需要10秒,或者可能根本不会通过(即立即继续执行)。

Thread.pass更像是暗示或建议。

答案 1 :(得分:0)

长话短说:这是heroku虚拟机。

有时您的整个虚拟机暂停,因此该程序(无论使用哪种语言)仅停止响应几秒钟。在专用盒子上运行100%解决了此问题。 Heroku 1x / 2x测功机对于不能接受多秒停顿的应用似乎并不可靠。我知道需要共享资源,但是要完全暂停世界几秒钟是太多了。似乎他们的日程安排可能需要一些工作。