linux釋放記憶體
一、釋放記憶體方法
1. 首先使用free -m檢視剩餘記憶體
linux-8v2i:~ # free -m
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
linux-8v2i:~ # free -m
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
linux-8v2i:~ # free -m
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
2. 執行sync命令
使用sync命令以確保檔案系統的完整性,sync 命令執行 sync 子例程,將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案。
使用sync命令以確保檔案系統的完整性,sync 命令執行 sync 子例程,將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案。
linux-8v2i:~ # sync
linux-8v2i:~ # sync
linux-8v2i:~ # sync
3. 修改/proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
說明:
1>. /proc是一個虛擬檔案系統,我們可以透過對它的讀寫操作作為與kernel實體間進行通訊的一種手段。也就是說可以透過修改/proc中的檔案,來對當前kernel的行為做出調整。也就是說我們可以透過調整/proc/sys/vm/drop_caches來釋放記憶體。
1>. /proc是一個虛擬檔案系統,我們可以透過對它的讀寫操作作為與kernel實體間進行通訊的一種手段。也就是說可以透過修改/proc中的檔案,來對當前kernel的行為做出調整。也就是說我們可以透過調整/proc/sys/vm/drop_caches來釋放記憶體。
2>. 關於drop_caches的官方說明如下:
Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.
3>. Linux核心會將它最近訪問過的檔案頁面快取在記憶體中一段時間,這個檔案快取被稱為pagecache。
4.再使用free -m檢視剩餘記憶體,情況如下:
linux-8v2i:~ # free -m
total used free shared buffers cached
Mem: 3952 1773 2325 0 0 80
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
total used free shared buffers cached
Mem: 3952 1773 2325 0 0 80
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
二、Linux記憶體分析
1. 首先對free -m檢視結果進行分析
linux-8v2i:~ # free -m
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
total used free shared buffers cached
Mem: 3952 2773 178 0 130 1097
-/+ buffers/cache: 1545 2406
Swap: 2055 0 2055
各引數含義:
total:總實體記憶體
used:已使用記憶體
free:完全未被使用的記憶體
shared:應用程式共享記憶體
buffers:快取,主要用於目錄方面,inode值等
cached:快取,用於已開啟的檔案
-buffers/cache:應用程式使用的記憶體大小,used減去快取值
+buffers/cache:所有可供應用程式使用的記憶體大小,free加上快取值
total:總實體記憶體
used:已使用記憶體
free:完全未被使用的記憶體
shared:應用程式共享記憶體
buffers:快取,主要用於目錄方面,inode值等
cached:快取,用於已開啟的檔案
-buffers/cache:應用程式使用的記憶體大小,used減去快取值
+buffers/cache:所有可供應用程式使用的記憶體大小,free加上快取值
其中:
total = used + free
-buffers/cache=used-buffers-cached,這個是應用程式真實使用的記憶體大小
+buffers/cache=free+buffers+cached,這個是伺服器真實還可利用的記憶體大小
total = used + free
-buffers/cache=used-buffers-cached,這個是應用程式真實使用的記憶體大小
+buffers/cache=free+buffers+cached,這個是伺服器真實還可利用的記憶體大小
2. Linux的記憶體分配方式
大家都知道,Linux伺服器為了提高效率,會提前申請記憶體,即使這些記憶體沒有被具體應用使用,Linux也會提前申請這些記憶體,然後利用這些記憶體做快取用,即將剛開啟的檔案系統存入cache中,這樣對應的伺服器free值會越來越少,buffers和cached會越來越大,因此給大家表象就是記憶體越來越少了,大家就緊張了;其實,大家完全不用緊張,Linux伺服器在發現記憶體不足時,會自動清理cached區域,釋放記憶體,然後繼續增大cache,free繼續減少。因此,那樣手動降低記憶體使用率的方法,其實就是圖一時之快,呵呵。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1442500/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux釋放記憶體及手動釋放Oracle共享記憶體段Linux記憶體Oracle
- 轉 linux 記憶體釋放Linux記憶體
- Linux釋放cache記憶體Linux記憶體
- linux 記憶體釋放命令Linux記憶體
- Linux之 手動釋放記憶體Linux記憶體
- Linux下如何釋放cache記憶體Linux記憶體
- Linux系統釋放cache記憶體Linux記憶體
- Linux手動釋放快取記憶體Linux快取記憶體
- vector 的記憶體釋放記憶體
- XCode釋放記憶體XCode記憶體
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- 如何釋放linux cache佔用的記憶體Linux記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 記錄一下,linux釋放記憶體的方法Linux記憶體
- Linux系統手動釋放記憶體快取Linux記憶體快取
- C# 垃圾回收釋放記憶體C#記憶體
- 正確釋放Vector的記憶體記憶體
- FireFox記憶體自動釋放Firefox記憶體
- 手工釋放linux記憶體——/proc/sys/vm/drop_cacheLinux記憶體
- golang 釋放記憶體機制的探索Golang記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- C/C++記憶體分配以及釋放C++記憶體
- mongodb釋放記憶體-切換日誌MongoDB記憶體
- 手動釋放linux下cache所佔用的實體記憶體Linux記憶體
- 手工釋放linux記憶體——/proc/sys/vm/drop_caches(轉載)Linux記憶體
- 如何主動釋放 HeapIdle 的記憶體API記憶體
- .Net記憶體管理釋放的兩種方式記憶體
- 共享記憶體段未釋放導致資料庫記憶體被耗盡記憶體資料庫
- Vector() 記憶體釋放 不得不說的故事記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體
- android釋放記憶體的一個辦法Android記憶體
- 簡單分配和釋放記憶體指令碼[更新]記憶體指令碼
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- linux結束處於Tl狀態的程序,釋放記憶體資源Linux記憶體
- 如何在Mac上釋放記憶體?Mac清除RAM教程Mac記憶體
- C/C++記憶體釋放應注意的問題C++記憶體
- 高質量的C程式碼.釋放記憶體 薦記憶體
- 怎麼手動在rstudio中釋放記憶體?記憶體