优化应用程序内存使用

Optimize application memory usage

我们有一些由其他团队和第三方提供商编写的应用程序、服务和库。我们需要优化这些应用程序和服务的内存使用。问题是我们没有太多关于应用程序内部的信息。当然,我们有源代码和修改任何我们想要的东西的权利,但要深入了解未知应用程序的内部结构是相当困难的。 所以主题是讨论和分享关于如何开始以及我们可以使用什么样的方法和工具的想法。

我们有 valgrind 和 heaptrack 来报告内存泄漏和整体分配。 我们正在考虑使用一些静态代码分析。

我想应该已经有人做过类似的事情了。很高兴听到其他人为此目的使用了什么以及您能够实现什么。

如有任何有用的信息,我们将不胜感激。

除非您的应用程序是一些非常特殊的低延迟 UDP 服务案例,不能容忍延迟增加,否则您可以使用 Valgrind.

轻松跟踪您的泄漏和次优内存分配。

Valgrind Memcheck that will help you brush out memory leaks, then continue with Valgrind Massif 开始,这将帮助您了解程序的哪些部分分配了最多的堆内存。

如果你确实是一个调试低延迟消息传递应用程序的穷人,你仍然可以通过覆盖自己来达到目的 malloc/realloc/free(来自 OpenJDK 的 LD_PRELOAD here) and, for instance, aborting the application when it's size grows beyond the certain limit, when the calling stack meets certain criteria. You can even plug libunwind and cache/print the top N allocating stacks (like they do in the heapTracker 的示例,是 java 但想法是一样的)。