2013-03-06 49 views
0

我在本地和DotCloud上建立了Rails 3.2.12應用程序。我對Dotcloud看到很慢的ActiveRecord(Postgres的)性能並不能明白爲什麼:ActiveRecord Postgres DotCloud(EC2)產品比Macbook空氣開發速度慢8-10倍

頁面加載的Macbook Air(開發模式的Rails應用程序):

Completed 200 OK in 617ms (Views: 361.3ms | ActiveRecord: 39.1ms) 

頁面加載DotCloud (Rails應用在生產模式下,相同的數據塊和頁面):

Completed 200 OK in 796ms (Views: 315.3ms | ActiveRecord: 329.4ms) 

這不是一個不穩定的時間,但在所有的頁面加載標準的性能三角洲。我的數據庫只有16MB,所以不大。在postgres服務上的內存分配是足夠的(128MB),只有30MB被使用。我檢查了我的本地postgres.conf,並且這些設置是默認的,未修復的postgresql.app設置。

這是不好的表現,只是在雲中期待什麼? Web服務器和數據庫服務器之間的網絡延遲是多少?

非常感謝如何調試&解決這個問題!

+1

雲中的硬件是什麼?不要空氣有超快速SSD? – AdamT 2013-03-06 19:35:37

+0

Dotcloud在EC2上,所以它就是它們所在的位置。但有了一個16MB的數據庫,postgres應該使用內存和緩存整個事情,而不是依靠磁盤......任何方式來調整? – n8vision 2013-03-06 19:59:01

+0

您需要做的第一件事是在兩臺機器上啓用PostgreSQL中的查詢持續時間記錄,然後比較查詢持續時間。看看這是一個數據庫級別的問題還是更高級別的問題。另外:機器的整體內存狀態是什麼?磁盤I/O負載? – 2013-03-06 23:39:50

回答

1

作爲dotCloud員工,我必須告訴您,如果您想徹底查看自己的應用程序,看看爲什麼它不符合您的期望,那麼您必須file a support ticket。我還應該告訴您,如果您處於沙箱模式,與您處於其中一個付費級別(如Live或Enterprise)相比,您可能會獲得較低的性能。

但是,作爲一位開發人員,我可以快速指出您的本地開發環境和您的環境之間的兩個關鍵區別。

  1. 你的開發環境中運行你的DBMS(PostgreSQL的),你的Rails應用程序在同一臺主機上,消除由於往返到數據庫的任何明顯的延遲。使用dotCloud,這些可能位於不同的主機上,甚至可能位於不同的數據中心。

  2. 您的開發環境可能使用固態硬盤(SSD)(取決於您的MacBook Air的使用年限),並且您剛進入EBS(亞馬遜彈性塊存儲),一種網絡連接存儲形式磁盤驅動器)。

這兩種變化之間,我不完全贊成通過響應時間的增加感到震驚,但我的好奇心被你的ActiveRecord時間激起了由290ms增加,而你的整體響應時間僅增加了180ms的。

我不想推測你的響應時間在哪裏被吃掉,所以我再次建議你file a support ticket at support.dotcloud.com,以便我們仔細看看。如果和當你這樣做,提到我的名字或這個StackOverflow線程,幷包括你的應用程序的URL。

+0

謝謝查爾斯。該應用程序正在實時模式下運行。我假設這樣一個小數據庫,它應該主要在緩存中。內存和磁盤IO吞吐量應該沒有關係。無論哪種方式,鑑於本地運行在開發模式,不緩存類等,你會期望生產性能增加至少可以說。我已經爲約翰提交了一張票。 – n8vision 2013-03-07 17:06:45

相關問題