2015-04-27 73 views
0

我們有一些由其他團隊和第三方提供商編寫的應用程序,服務和庫。我們需要優化這些應用程序和服務的內存使用情況。問題是我們沒有太多有關應用程序內部的信息。當然,我們有一個源代碼和權利來修改我們想要的任何東西,但要深入瞭解未知應用程序的內部是非常困難的。 所以我們的主題是討論和分享如何開始的想法以及我們可以使用哪種方法和工具。優化應用程序內存使用情況

我們有valgrind和heaptrack來報告內存泄漏和整體分配。 我們正在考慮使用一些靜態代碼分析。

我想應該有人做過這樣的事情。聽到別人用於這個目的以及你能達到什麼目的,真是太棒了。

任何有用的信息表示讚賞。

回答

1

除非您的應用程序是一些非常奇特的低延遲UDP服務,無法容忍延長的延遲情況,您可以使用Valgrind輕鬆跟蹤您的泄漏和不理想的內存分配情況。

Valgrind Memcheck開始,這將幫助您刷出內存泄漏,然後繼續Valgrind Massif,這將幫助您瞭解程序的哪些部分分配了大部分堆內存。

如果您確實是一個窮人調試低延遲消息傳遞應用程序,您仍然可以通過覆蓋自己的malloc/realloc/free(例如LD_PRELOAD here)來實現,例如,在應用程序的大小增長時放棄應用程序當調用棧符合某些標準時,超出一定的限制。你甚至可以插入libunwind並緩存/打印前N個分配堆棧(就像他們在OpenJDK中的heapTracker中做的那樣,它是java,但它的想法是相同的)。

+0

謝謝。其實這是這個計劃,但我想也可能有其他的想法。 – incognito

相關問題