我们有一些由其他团队和第三方提供商编写的应用程序,服务和库。我们需要优化这些应用程序和服务的内存使用。问题是我们没有太多关于应用程序内部的信息。当然,我们有源代码和修改我们想要的任何内容的权利,但是很难深入了解未知应用程序的内部。 因此,主题是讨论和分享如何开始以及我们可以使用何种方法和工具的想法。
我们有valgrind和heaptrack来报告内存泄漏和整体分配。 我们正在考虑使用一些静态代码分析。
我想应该有人做过类似的事。很高兴听到其他人用于此目的以及你能够实现的目标。
赞赏任何有用的信息。
答案 0 :(得分:1)
除非您的应用程序是低延迟UDP服务的一种非常奇特的情况,不能容忍增加的延迟,您可以使用Valgrind轻松跟踪泄漏和次优内存分配。
从Valgrind Memcheck开始,这将帮助您清除内存泄漏,然后继续Valgrind Massif,这将帮助您了解程序的哪些部分分配大多数堆内存。
如果您确实是一个调试低延迟消息传递应用程序的穷人,您仍然可以通过覆盖自己的malloc / realloc / free(例如使用LD_PRELOAD here)来完成这一操作,例如,在中断时删除应用程序当调用堆栈满足某些标准时,它的大小超出了某个限制。您甚至可以插入libunwind并缓存/打印前N个分配堆栈(就像它们在OpenJDK的heapTracker中所做的那样,它的想法是相同的。)