[英]Increased memory usage for a process
我在Solaris中运行了一个C ++进程,它创建了3个线程来完成一些任务。 这些线程在循环中执行,只要进程正在运行,它就会运行。
但是,我发现进程的内存使用量不断增长,一旦内存使用量超过4GB,进程核心就会转储。
有人可以给我一些关于内存使用增长背后可能存在的问题的指示吗? 由于内存耗尽,我可以做些什么来防止核心转储过程?
线程重启有用吗?
欢迎任何指示。
不,重新启动线程无济于事。
您的应用程序似乎有内存泄漏。
根据我的经验,有两种类型的内存泄漏:
对于第一种类型,有一些工具可以报告应用程序退出时尚未释放的内存。 我不知道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.