【问题标题】:Unable to track memory leak in Linux无法在 Linux 中跟踪内存泄漏
【发布时间】:2016-09-15 12:47:54
【问题描述】:

我有一个基于 RTMP 的实时应用程序流应用程序,如果运行,它会泄漏内存。不幸的是,我无法通过 valgrind 运行它,因为它是一个实时应用程序

这里有问题 1. 应用程序 PID 内存即使在下班后也保持恒定在 3.8% 2.通过slabtop的内核内存保持不变 3. 在 meminfo 中,我看到可用内存不断减少!

我怎么知道是谁占用了这段记忆?我怀疑 TCP 缓冲区或类似的东西。有人可以帮忙吗?

【问题讨论】:

  • 当我将top的%MEM相加时,它与已用内存不匹配
  • 你确定不只是linux disk cache
  • 查看 memingo 中的 all 值。随着时间的推移绘制它们,看看会发生什么

标签: c++ linux memory memory-leaks


【解决方案1】:

仅凭提供的信息,我们不可能说出您在哪里泄漏。

如果您不能使用 Valgrind,我建议您尝试隔离程序的各种功能/模块。然后,尝试禁用/启用这些模块,以查看禁用/启用时是否存在泄漏。

例如,尝试禁用应用程序的网络模块,看看它是否继续泄漏。这样您就可以将问题缩小到一个/多个模块,而不是整个应用程序。

【讨论】:

    【解决方案2】:

    我找到了根本原因。在 Linux 中将 tcp 内存设置为 32MB 会导致问题。将其重置为 87KB,这是 Centos 7.2 中的默认值

    不确定为什么将其设置为高值会导致问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2012-10-19
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      相关资源
      最近更新 更多