在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