【问题标题】:Optimize application memory usage优化应用程序内存使用
【发布时间】:2015-07-05 20:38:24
【问题描述】:

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

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

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

感谢任何有用的信息。

【问题讨论】:

    标签: c++ linux memory optimization memory-leaks


    【解决方案1】:

    除非您的应用程序是一些非常奇特的低延迟 UDP 服务案例,不能容忍增加的延迟,否则您可以使用 Valgrind 轻松跟踪您的泄漏和次优内存分配。

    Valgrind Memcheck 开始,这将帮助您清除内存泄漏,然后继续Valgrind Massif,这将帮助您了解程序的哪些部分分配了最多的堆内存。

    如果您确实是调试低延迟消息传递应用程序的穷人,您仍然可以通过覆盖自己的 malloc/realloc/free 来解决问题(例如,使用 LD_PRELOAD here),例如,在应用程序变大时中止应用程序当调用堆栈满足特定条件时,增长超出特定限制。您甚至可以插入 libunwind 并缓存/打印前 N 个分配堆栈(就像它们在 OpenJDK 中的 heapTracker 中所做的那样,它是 java,但想法是一样的)。

    【讨论】:

    • 谢谢。实际上这是计划,但我认为可能还有其他想法。
    最近更新 更多