我们有一些由其他团队和第三方提供商编写的应用程序、服务和库。我们需要优化这些应用程序和服务的内存使用。问题是我们没有太多关于应用程序内部的信息。当然,我们有修改任何东西的源代码和权限,但是很难深入了解未知应用程序的内部。
因此,我们的主题是讨论和分享如何开始以及我们可以使用什么样的方法和工具的想法。
我们有valgrind和heaptrack来报告内存泄漏和总体分配。
我们正在考虑使用一些静态代码分析。
我想应该已经有人做了这样的事。很高兴听到别人用什么来达到这个目的,以及你能得到什么。
任何有用的信息都是值得赞赏的。

最佳答案

除非您的应用程序是一种非常奇特的低延迟UDP服务,不能容忍延迟增加,否则您可以使用Valgrind轻松跟踪泄漏和次优内存分配。
Valgrind Memcheck开始,这将帮助您清除内存泄漏,然后继续Valgrind Massif,这将帮助您了解程序的哪些部分分配了大部分堆内存。
如果您确实是一个调试低延迟消息传递应用程序的穷人,那么您仍然可以通过重写malloc/realloc/free(例如,使用LD_PRELOADhere)来完成此任务,例如,当应用程序的大小超过某个限制时,当调用堆栈满足某些条件时中止它。您甚至可以插入libunwind并缓存/打印前N个分配堆栈(就像OpenJDK中的heapTracker一样,这是java,但想法是相同的)。

08-05 20:19