繁体   English   中英

增加进程的内存使用量

[英]Increased memory usage for a process

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

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

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

线程重启有用吗?

欢迎任何指示。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM