簡體   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