在Solaris 10上,我有一个多线程进程,出现了一个奇怪的行为。它管理复杂的C++结构(RWTVal或RWPtr)。这些结构是根据存储在数据库中的数据构建的(使用Pro * C)。该过程每小时都会在数据库中查找新的信息,在内存上构建新的结构并释放旧数据。但是,每次重复此过程时,进程内存使用量都会增加几MB(12/16MB)。进程的内存使用量从100M开始直到接近1,4G。就这一点而言,这个过程似乎存在内存泄漏。但奇怪的是,在这之后,这个过程停止了,继续成长。当我尝试查找内存泄漏时(使用Purify工具),该过程不会长大,也不会显示明显的泄漏。有没有人找到类似的行为,或可以解释可能发生的事情?Solaris进程内存使用量增加但并非永久
1
A
回答
1
它很可能在释放内存时,操作系统实际上并没有“扔掉”旧的内存页,因为如果操作系统没有,应用程序分配更多的内存会更快分配更多页面。但只能达到当然的极限。
+0
不只是“可能”。这是记录的行为。 Solaris上'free()'的手册页显示_“...被执行,该空间可供应用程序进一步分配,但不会返回到系统。”_请参见http://docs.oracle.com /cd/E23824_01/html/821-1465/free-3c.html –
+0
是的,这是一个问题:新的malloc操作必须重用先前释放的内存,但似乎没有发生。在正常执行过程中,由于此重用内存,进程在处理时可能会增长一点点。在我的例子中,为什么没有发生?经过新的测试后,我发现稳定点(1.4G)取决于我在每次操作中必须分配的内存量。如果我尝试在相同的操作中分配更大的结构,则该进程会达到4G的最大可寻址能力(这是一个32位应用程序)。非常感谢。 – jjavibv
相关问题
- 1. 如何永久增加java堆内存?
- 2. 永久代内存不足。如何增加内存?
- 3. 进程内存大小solaris
- 4. 如何使用应用内结算永久隐藏增加? Android
- 5. 在Windows上增加Python进程的内存使用量
- 6. Java进程的内存使用量不断增加无限
- 7. Matlab变量永久保存
- 8. rsync永久增量文件列表
- 9. 内存使用量增加105%中介
- 10. iPad内存使用量不断增加
- 11. 由C/C++程序使用的增加(非堆栈)内存
- 12. 使用SDL_TTF时,C++程序内存使用量不断增加
- 13. 创建永久性窗口,但更改已增加
- 14. Continus进程虚拟内存增加
- 15. 增量内存使用
- 16. Rails:工人失败并增加内存使用量
- 17. 如何在solaris 10中永久更改PATH变量?
- 18. Mysql的“内存使用量”增加和增加
- 19. Solaris上运行时进程的当前内存使用情况
- 20. 内存泄漏到永久存储中
- 21. 内存使用量增加。释放内存不被重用
- 22. Qt qml应用程序增加内存使用量
- 23. Actionscript/Flash/AIR应用程序 - 增加最大内存使用量
- 24. 一个进程的内存使用增加
- 25. Node.js虚拟内存不断增加,同时使用子进程
- 26. WCF内存使用增加
- 27. 永久加载
- 28. 非堆内存和加载类的数量不断增加
- 29. 新增内存大量增加
- 30. Android设备的内存使用量增加,但不是应用程序内存,直到设备被挂起
@JoachimPileborg你应该做出答案。听起来像是对我的正确答案。 – EricSchaefer