2011-01-31 56 views
6

我有一個運行在nginx/passenger上的生產ruby sinatra應用程序,而且我經常看到請求會被莫名其妙地拖延。我寫了一個腳本,每10秒鐘在我的機器羣集上調用乘客狀態,並將結果繪製在圖上。這是我所看到的:如何在乘客上的所有正在運行的紅寶石線程上獲取堆棧跟蹤

enter image description here

藍線表示全球排隊等候不斷飆升到60這是跨4臺機器的平均,所以當藍線打60,這意味着每臺機器刷爆出。我將當前的passenger_max_pool_size設置爲20,因此它達到最大池大小的3倍,然後推測會丟棄後續請求。

我的應用依賴於兩個關鍵的外部資源 - Amazon RDS mysql後端和Redis實例。也許其中一個定期變得緩慢或無響應,從而導致這種行爲?

任何人都可以告訴我如何獲得堆棧跟蹤,看看這裏的瓶頸是亞馬遜RDS,Redis,還是其他?

謝謝!

回答

4

我想通了 - 我在Redis中有一個SAVE配置參數,每分鐘發射一次。很明顯,redis的分叉/保存操作阻止了我的應用程序。我更改配置參數爲「3600 1」,這意味着我只能每小時保存一次數據庫,這是可以的,因爲我將它用作緩存(數據保存在MYSQL中)。

+0

我能知道多久的等待? AFAIK,自動保存應該在後臺進行,並且應該只在複製內存頁面時延遲,這應該是300ms以上。 – seppo0010 2011-02-01 02:03:29

相關問題