【问题标题】:How do I find a system memory leak in linux?如何在 linux 中找到系统内存泄漏?
【发布时间】:2018-12-02 08:25:12
【问题描述】:

我有一个单片软件,一个基于基本 linux 内核的游戏,它似乎在交换空间中泄漏内存。进程本身的内存使用情况在一天左右报告为恒定,但系统上的可用内存一直在减少,直到没有更多的物理内存空间。 除了标准的 X 服务器和 debian 系统守护程序之外,没有其他软件在运行。连接了许多使用 libusb 的 USB 设备。

这不是典型的新建/删除泄漏。

我不知道在哪里寻找已消耗但未释放的系统资源。它不是 OpenGL,所有分配的 OGL 内存都被释放,我在日志中看到了这一点。但是,驱动程序是否有可能在流程之外出现行为不端?

所以基本上问题是,程序可以使用哪些类型的资源,如果不释放,即使在程序退出后也会继续泄漏系统内存?

可能的项目: 我读过 mmap 的地方,如果使用不正确会泄漏系统内存。 但是在这个软件中使用的地方并没有在这个测试用例中运行。

【问题讨论】:

  • 标题具有误导性,听起来您是在询问有关泄漏内存的方法的建议,而不是有关如何追踪泄漏的建议。
  • 我的意图并不重要,问题保持不变。程序退出后如何创建/哪些方法会造成内存泄漏?
  • 你试过在valgrind下运行程序吗?
  • 是的,我说“这不是典型的新建/删除泄漏”。 Valgrind 报告一切正常。
  • 在 linux 上内存不能“无处”。您可以随时查看它的去向。看这里:binarytides.com/linux-command-check-memory-usage

标签: c++ c linux memory-leaks


【解决方案1】:

经过多次测试后,该问题最终确定是由先前版本的 NVidia 图形驱动程序泄漏内核内存引起的。升级解决了这个问题。 对于任何感兴趣的人,泄漏的版本是:343.36 / running on 750Ti

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2011-01-09
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多