Solaris 中的 prstat SIZE 值增加是不是表明内存泄漏?

Posted

技术标签:

【中文标题】Solaris 中的 prstat SIZE 值增加是不是表明内存泄漏?【英文标题】:Does prstat SIZE value in Solaris increase indicate memory leak?Solaris 中的 prstat SIZE 值增加是否表明内存泄漏? 【发布时间】:2010-10-30 12:14:08 【问题描述】:

在我的程序中,我创建了 100 个线程,然后等待所有线程加入,然后再次重复此操作。

在每个线程中,我创建一些内存并释放它。我相当肯定,我在这些线程中创建的所有内存都被释放了。

但是,prstat 的 SIZE 输出和 RSS 输出不断增加。它们以 400 万的速度定期增加

这些值表示什么?这是否意味着有一些内存泄漏?

编辑:

我的初衷是找出prstat输出中SIZE & RSS列的含义。另外,SIZE 显示的值的增加是否证实了代码中存在内存泄漏?

【问题讨论】:

您好,Jay,您可以在这里跟进您的问题吗?它目前处于非常令人沮丧的状态......澄清“指示”的含义也会有所帮助。 @jilliagre,抱歉,正忙于其他事情,所以无法访问该站点。现在,我已经澄清了。希望没事。另外,我不知道谁对您的回答投了反对票。这是迄今为止我得到的最接近的答案。 我很确定 zvrba 否决了我的回答,因为他在您的问题中理解“指示”的意思是“可能是”的症状,而我理解它的意思是“毫无疑问是”的症状.不幸的是,通过在您的编辑中重复“指示”,您并没有澄清这一点:-( @jilliagre,我重新编辑了我的问题。我的意思是“毫无疑问是”的症状。如果需要,请随时编辑更多内容。 【参考方案1】:

不,prstat SIZE 增加不一定表示内存泄漏。您只能猜测可能存在内存泄漏。此外,当使用标准 Solaris malloc/free 库时,释放的内存不会返回给操作系统,因此 SIZE 指标永远不会减少。您确实应该发布一个展示该问题的示例源代码,以帮助确定您是否真的遇到了内存泄漏。

【讨论】:

【参考方案2】:

是的,不断增加的内存使用量表示内存泄漏。

【讨论】:

或者只是做更多事情的程序。并非所有程序都具有稳定的内存使用状态 - 只有当您停止使用它时未能释放内存时才会出现泄漏,而不是当您继续使用更多时。仅从 prstat,您无法判断它是哪种情况。 @alanc:你真的读过他的程序的描述吗? @zvrba:公开的海报描述不足以诊断内存泄漏。没有看到代码,你不应该肯定有一个。 OP 写道:“我很确定,我在这些线程中创建的所有内存都被释放了。”如果他的 main() 函数除了创建和等待线程之外什么都不做(正如他也写的那样),那么是的,这足以怀疑内存泄漏。 没有人声称不会怀疑内存泄漏。你的主张比这更有说服力,这就是我投反对票的原因。

以上是关于Solaris 中的 prstat SIZE 值增加是不是表明内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

将localStorage值增加一

带有 MySQL 5.6 的 Solaris 10 中的 MySQL 性能问题

Solaris 10 中的 libv8 安装(SPARC 架构,gcc 4.6.3)

为什么timer_create抛出solaris 10中的SIGEV_THREAD错误?

在Solaris x86平台上覆盖mapfile中的hwcap_2

Solaris 共享库和全局变量