2013-07-15 74 views
1

我在heroku上部署了一個rails應用程序。我們有一個工作人員(工作:工作),它連續創建了七個管理對象(每個任務一個),並以無限循環的方式在其上運行方法。這是主要的代碼如下所示(它的重要組成部分反正):heroku工作者任務內存配額超過

loop do 
    begin 
    Manager.subclasses.each do |manager_klass| 
     manager_klass.new.process 
    end 
    #exception handling here 
    end 
    sleep(1) 
end 

的任務沒有做這樣的事情Model.all或此類。我讀過很多關於ruby中泄漏和膨脹的文章,並且避免了大多數。

我的工人的Heroku日誌包括: R14 - 超過內存配額;

工作人員運行大約3小時後(這是內存泄漏/內存堆積的實質證明),這開始顯示。

我試過memprof(不適用於ruby 1.9),bleak_house(鞋無關信息)和其他使用linux命令記錄內存快照(這不會與heroku一起使用)的寶石。

我已經查看了關於此的所有答案,沒有幫助。

關於我的七個經理在單一工作中工作的具體案例的任何想法?

回答

0

試試看看你的內存使用情況:https://devcenter.heroku.com/articles/log-runtime-metrics。另請參閱此https://blog.heroku.com/archives/2013/3/19/log2viz他們應共同確認您的內存泄漏。

不同版本的Ruby有幫助嗎?

另外:你爲什麼要創建「子工」,可以這麼說?你的工作人員沒有被充分利用嗎?你真的需要同時處理7個工作嗎(而不是有更多的工人)。

+0

謝謝Jon。 你提到的這兩篇文章都不會幫助我,因爲它們告訴我們RAM的整體用法。泄漏位於工作人員的task_managers中的某處。 我最近的發現是,即使在無限循環中運行的任務中,內存也會累積,次工作者越少,累積速度越慢,但仍然存在。 我需要使用'sub-workers'(酷名),因爲我有8個任務正在運行,其中4個需要在每2到5秒後運行,並且我無法承受連續運行的4個獨立工作人員。 我使用紅寶石1.9,應該沒問題。 – saGii

相關問題