与sinatra薄应用迟钝

问题描述:

当交通有点高(30-40用户)时,我有一个奇怪的滞后问题与一个sinatra薄应用程序。 这是一个使用长轮询的小游戏,所以http IO可以比用户数量高。与sinatra薄应用迟钝

CPU负载保持低位,并且有很多可用内存。

以下是一些典型的日志线时滞后发生:

1 - [17/Jul/2015:16:50:17 -0400] "POST /play?next=word HTTP/1.1" 200 1 0.0018 
2 - [17/Jul/2015:16:50:17 -0400] "GET /update?_=1437166100579 HTTP/1.1" 200 304 15.0046 
3 - [17/Jul/2015:16:50:17 -0400] "GET /update?_=1437166102348 HTTP/1.1" 200 286 15.0045 
4 - [17/Jul/2015:16:50:17 -0400] "POST /accept_replay? HTTP/1.1" 200 - 0.0021 
5 - [17/Jul/2015:16:50:18 -0400] "GET /core HTTP/1.1" 200 3719 0.0015 
6 - [17/Jul/2015:16:50:18 -0400] "GET /join HTTP/1.1" 302 - 0.0640 
7 - [17/Jul/2015:16:50:18 -0400] "GET /core HTTP/1.1" 200 3719 0.0024 
8 - [17/Jul/2015:16:50:19 -0400] "POST /play?next=word HTTP/1.1" 200 1 0.0034 
9 - [17/Jul/2015:16:50:19 -0400] "GET /update?_=1437166215907 HTTP/1.1" 200 248 10.0018 
10- [17/Jul/2015:16:50:19 -0400] "GET /update?_=1437166222579 HTTP/1.1" 200 252 11.0029 
11- [17/Jul/2015:16:50:31 -0400] "GET /core HTTP/1.1" 200 3719 0.0034 
12- [17/Jul/2015:16:50:31 -0400] "POST /sentiment/bad? HTTP/1.1" 200 - 0.0024 
13- [17/Jul/2015:16:50:31 -0400] "GET/HTTP/1.1" 200 4449 0.0086 
14- [17/Jul/2015:16:50:31 -0400] "POST /decline_replay HTTP/1.1" 302 - 0.0020 

和30更准确地在[17 /月/ 2015:16:50:31 -0400]

(获取/更新是longpolling请求,因此可能需要长达40秒) Everythings在10到11之间停止12秒。在此期间收到的所有请求似乎都是同时处理的。

我开始这样

thin start -p 80 

能不能薄问题的应用程序? 我需要自定义瘦配置文件吗? 我需要nginx吗?

任何指示,欢迎...

编辑: 错误,我在ObectSpace [SystemStackError,1] [NoMemoryError,1]找到[IO错误,1]

那种行为的气味很像请求排队,这意味着没有足够的Web进程可用于处理传入的请求。所以这些请求就在等待,然后清理积压,他们突然全部得到超快处理,并且一次处理完毕。

这家伙写了一篇关于如何使用Thin, EventMachine, and Async Sinatra to handle long-polling requests的好帖子。

+0

谢谢你的回答。我做了一些压力测试,100个代理随机播放......并且一切都很好(在小于prod服务器的VM上)。但这些代理不使用长轮询请求。所以这似乎是问题所在。感谢链接,我认为这将是有用的。 – jpt