天天看點

Linux釋放記憶體空間

linux伺服器運作一段時間後,由于其記憶體管理機制,會将暫時不用的記憶體轉為buff/cache,這樣在程式使用到這一部分資料時,能夠很快的取出,進而提高系統的運作效率,是以這也正是linux記憶體管理中非常出色的一點,是以乍一看記憶體剩餘的非常少,但是在程式真正需要記憶體空間時,linux會将緩存讓出給程式使用,這樣達到對記憶體的最充分利用,是以真正剩餘的記憶體是free+buff/cache

  但是有些時候大量的緩存占據空間,這時候應用程式回去使用swap交換空間,進而使系統變慢,這時候需要手動去釋放記憶體,釋放記憶體的時候,首先執行指令 sync 将所有正在記憶體中的緩沖區寫到磁盤中,其中包括已經修改的檔案inode、已延遲的塊i/o以及讀寫映射檔案,進而確定檔案系統的完整性

  說到清理記憶體,那麼不得不提到/proc這一個虛拟檔案系統,這裡面的資料和檔案都是記憶體中的實時資料,很多參數的擷取都可以從下面相應的檔案中得到,比如檢視某一程序占用的記憶體大小和各項參數,cpu和主機闆的詳細資訊,顯示卡的參數等等;相應的關于記憶體的管理方式是在/proc/sys/vm/drop_chches檔案中,一定要注意這個檔案中存放的并不是具體的記憶體内容,而是0-3這幾個數字,通過檔案大小隻有1b也可以知道,而這些代号分别告訴系統代表不同的含義如下:

  0:0是系統預設值,預設情況下表示不釋放記憶體,由作業系統自動管理

  1:釋放頁緩存

  2:釋放dentries和inodes

  3:釋放所有緩存

  是以根據上面的說明,分别将1,2,3這3個數字重定向到drop_caches中可以實作記憶體的釋放,一般釋放記憶體都是重定向3到檔案中,釋放所有的緩存

  那麼下面舉個例子,比如這裡隻釋放頁緩存,首先使用 free -h 檢視目前記憶體剩餘

  

Linux釋放記憶體空間

  目前記憶體剩餘570m左右,另外buff/cache是1.3g,根據上面說的現在真正的剩餘記憶體應該是1.8g左右,首先寫緩存到檔案系統:

  然後執行下面指令釋放記憶體(頁緩存buff/cache):

  執行完之後,再次檢視記憶體剩餘:

Linux釋放記憶體空間

  會發現記憶體被釋放了,可用記憶體确實變為1.8g左右

  到這裡記憶體就釋放完了,現在drop_caches中的值為1,如果現在想讓作業系統重新配置設定記憶體,那麼設定drop_caches的值為0即可:

  另外需要注意的是,在生産環境中的伺服器我們不要頻繁的去釋放記憶體,隻在必要時候清理記憶體即可,更重要的是我們應該從應用程式層面去優化記憶體的利用和釋放,經常清理記憶體可能隻是暫時屏蔽的應用程式中的一些bug,是以更重要的是程式的調優,其他的交給作業系統來管理

繼續閱讀