2013-01-22 85 views
0

我有一個扭曲的應用程序不斷因爲內存問題而死亡。該程序規模不斷擴大,在被OS關閉之前消耗了系統的所有內存。重新啓動並重復。扭曲的過程是巨大的

這是一個虛擬服務器上,所以我增加了一倍的內存,這個問題解決了 - 守護穩定在1.25GB的內存

有誰我如何能最好的資料這個告訴你有什麼建議/所有的記憶都被吸進去了?

如果應用程序的信息有幫助,我使用twisted reactor和internet.timer.TimerService來輪詢數據庫以通過三個「服務」更新項目。要處理的項目被推送到twisted.internet.defer.DeferredList中,並且它們的處理髮生在deferToThread塊中。在延遲的過程中,有一些阻塞操作(獲取網頁等)和大量的HTML解析(美麗的湯和其他庫)。我建議reactor.threadpool大小爲10,每個'服務'都會使用具有10個令牌的SemaphoreService進行線程化。我真的希望這個守護進程的內存最大可達400MB,而不是3倍。

回答

2

這是更多的想法如何調試我的扭曲的應用程序中的內存泄漏/使用問題的一般思想共享。 Twisted有一個ssh服務器支持,並且是我添加到幾乎所有我的開發項目中的東西。 ssh提供了一個交互式python解釋器訪問方法,它具有python垃圾回收器可用和一些輔助函數,它們允許我a)檢查來自同一類的實例的數量,b)啓動和停止檢查隨時間計數和c)獲得該類的所有參考。交互式解釋器的好處在於,它允許對違規實例進行臨時反省,與其他對象的關係以及它們所處理的進程的狀態。迄今爲止,這已證明是一種有價值的工具,可以準確找到我已忘記的確切位置/在我的項目中未發現ref參考文獻的問題。

+0

哦,這是偉大的洞察力!謝謝!我一定會嘗試這種方法! –

+0

扭曲的問題在你的下面,有內存泄漏發現的objgraph推薦。這實際上可以非常好地與我之前提到的ssh方法結合使用。有 - 你有它運行時調用瑞士刀交互式內存探索:) – jbreicis