2017-04-16 64 views
-1

我正在使用Linux內核2.6.38,並且我正在運行一個分配4GB內存的進程,並且我有一個4GB的RAM,所以當我運行我的應用程序時,它將分配大約0.5GB來自交換空間。但是,我的應用程序運行很長時間並且多次訪問交換空間的數據。linux交換空間永遠不會釋放內存

(編輯) 爲了澄清我在做什麼:

  • 我運行Linux 2.6.38,4 GB的RAM。

  • 沒有運行任何應用程序,系統佔用大約500MB的RAM。

  • 我創建了一個簡單的應用程序,它分配4GB的內存並跨越分配的內存並多次更改該內存的值(循環10次迭代)。

  • 很明顯,我需要交換空間才能運行應用程序。

  • 當我運行我的應用程序時,交換空間不斷積累並在幾次迭代後變滿,並且進程被終止。

  • 在進程死亡後,交換空間仍然保持滿。

  • 我測試了我的應用程序在更新的內核上,它工作正常,交換空間不積累。

這是這個內核版本(2.6.38)的錯誤嗎?有沒有修復它?

+0

你的問題很不清楚,但你至少可以做到以下一種:使用具有更多內存的設備,一次分配更少的內存,添加額外的交換空間..你的過程也受到[swappiness](https ://en.wikipedia.org/wiki/Swappiness)「,您可以根據自己的需要進行修改。 – ti7

回答

0

我不確定我的回答會回答你的問題,但我後來問自己一個類似的問題。

總結Linux分配內存(RAM/SWAPP)時,只在需要時釋放內存。這意味着即使在進程終止之後,分配的內存仍將保留,直到另一個進程需要該空間。

但是,如果你想釋放SWAPP你可以做手工

sudo swapoff -a 

不要忘記重新打開它

sudo swapon -a 

您可以找到那個linkthat one

更多信息
1

沒有內存泄漏。

你假設當你的應用程序需要比可用內存更多的內存時,它的一部分被寫入交換。這不一定是真的。

系統可能(通常會)編寫其他完全不相關的進程進行交換,因爲它們目前未被使用。

由於此交換空間不屬於您的應用程序,它將在應用程序退出後保持使用狀態。

這個交換空間可能會進一步長時間保持使用,因爲當有空閒的RAM時,Linux不會搶先加載它們。