2015-07-18 46 views
2

當交通有點高(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]

回答

1

那種行爲的氣味很像請求排隊,這意味着沒有足夠的Web進程可用於處理傳入的請求。所以這些請求就在等待,然後清理積壓,他們突然全部得到超快處理,並且一次處理完畢。

這傢伙寫了一篇關於如何使用Thin, EventMachine, and Async Sinatra to handle long-polling requests的好帖子。

+0

謝謝你的回答。我做了一些壓力測試,100個代理隨機播放......並且一切都很好(在小於prod服務器的VM上)。但這些代理不使用長輪詢請求。所以這似乎是問題所在。感謝鏈接,我認爲這將是有用的。 – jpt