首页 > 解决方案 > 内存泄漏是否总是会导致高内存消耗?

问题描述

我的客户正在使用 RHEL,他们遇到的问题对我来说似乎是内存泄漏。

但是我的客户向我展示了有大量可用内存并且消耗是合理的。

所以我的问题是,如果发生内存泄漏,是否不可避免地面临内存消耗问题?或者可能存在内存泄漏可能导致更多其他问题而没有内存消耗的情况?

标签: memorymemory-leaksmemory-leak-detector

解决方案


内存泄漏是我们作为开发人员绝对不想要的,应该在出现时修复。

但是,内存泄漏在实践中不一定是问题。除非操作系统内核本身存在错误或内存泄漏,否则在某些有错误的软件中发生的所有泄漏内存将在程序终止时自动释放。所以内存泄漏的严重程度实际上取决于实际数字:

  • 平均内存泄漏率是多少,以每秒字节数为单位?
  • 预期的程序生命周期是多少,以秒为单位?
  • 系统上有多少可用内存?

例如,一个小型实用程序每秒泄漏 1 KB,仅在 32 GB 的计算机上运行 1 秒,除非您对其进行分析,否则将完全被忽视。但是,如果同样的实用程序是生产服务器上的永久守护程序,就会出现问题:分配的内存量每天将增加 86 MB,并且在一年的正常运行时间之后,该守护程序将泄漏 31.5 GB,与系统内存。

但是即使在后一种情况下,系统也可能会继续平稳运行,因为所有泄漏的内存可能会被交换到磁盘上,因为当指向它的指针丢失时,就无法再访问泄漏的内存。

没有任何内存泄漏的编写良好的软件可以很好地为其需要分配千兆字节的内存。这比初学者编写的完全幼稚的程序消耗的内存要高得多,完全泄漏了它的几千字节。

所以我的结论是,这取决于。大多数时候,用户程序中的内存泄漏不是问题,当然应该避免它们。在操作系统内核和守护程序软件中,它们通常很关键。


推荐阅读