增加进程的内存使用量

时间:2012-07-06 06:00:16

标签: c++ multithreading memory process

我在Solaris中运行了一个C ++进程,它创建了3个线程来完成一些任务。 这些线程在循环中执行,只要进程正在运行就会运行。

但是,我发现进程的内存使用量不断增长,一旦内存使用量超过4GB,进程核心就会转储。

有人可以给我一些关于内存使用量增长背后问题的一些指示吗? 由于内存耗尽,我该怎么做才能防止核心转储过程?

线程重启会有帮助吗?

欢迎任何指示。

1 个答案:

答案 0 :(得分:4)

不,重新启动线程无济于事。

您的应用程序中似乎有内存泄漏。

根据我的经验,有两种类型的内存泄漏:

  • 应用程序退出时可以看到的实际内存泄漏
  • 'false'内存泄漏,就像在应用程序生命周期中增加但在最后正确清理的大列表

对于第一种类型,有一些工具可以报告应用程序退出时尚未释放的内存。我不知道Solaris,但Windows下有很多工具可以做到这一点。对于Unix,我认为Valgrind会这样做。

对于第二种类型,Windows下还有一些工具可以拍摄应用程序内存的快照。只需花几分钟或几小时的间隔(取决于您的应用程序)拍摄两张快照,然后通过工具进行比较。在Solaris上可能有这样的类似工具。

使用这些工具可能需要您的应用程序占用更多内存,因为该工具需要存储每个内存分配的调用堆栈。因此,它也会运行得慢得多。但是,当您正在使用此工具时,您将只看到此效果,因此在现实生产代码中没有任何效果。

所以,只需在Solaris下寻找这种工具。我快速搜索了它,发现了这个链接:http://prefetch.net/blog/index.php/2006/02/19/finding-memory-leaks-on-solaris-systems/。这可能是一个起点。

编辑:一些其他信息:您正在寻找合适的内存吗?即使您总共只分配了3GB,由于内存碎片,总虚拟地址空间仍可能达到4GB。不幸的是,你无能为力(除了使用另一种内存分配策略)。