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