内存泄漏应该总是导致高内存消耗吗?

Should memory leak always results high memory consumption?

我的客户正在使用 RHEL,他们遇到了一个问题,在我看来像是内存泄漏。

但是我的客户告诉我有大量可用内存并且消耗是合理的。

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

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

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

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

例如,一个小型实用程序每秒泄漏 1 KB 运行仅在 32 GB 计算机上的 1 秒钟内泄漏,除非您对其进行分析,否则将完全不会引起注意。但是,如果这个实用程序是生产服务器上的永久守护程序,它就会成为一个问题:分配的内存量每天会增加 86 MB,并且在正常运行一年后,守护程序将泄漏 31.5 GB,与系统内存。

但即使在后一种情况下,系统也可能会继续运行顺利进行,因为所有泄漏的内存都可能会交换到磁盘并永远留在那里,因为当指针指向时无法再访问泄漏的内存它丢失了。

一个没有任何内存泄漏的编写良好的软件可以很好地分配千兆字节的内存来满足其需要。这比初学者编写的完全天真的程序要高得多,泄漏了它的几千字节。

所以我的结论是视情况而定。大多数情况下,用户程序中的内存泄漏不是问题,尽管它们当然应该避免。在 OS 内核和守护程序软件中,它们通常很关键。