釋放內存linux
Ⅰ 如何手動釋放linux內存
Linux釋放內存的命令:x0dx0asyncx0dx0aecho 1 > /proc/sys/vm/drop_cachesx0dx0ax0dx0adrop_caches的值可以是0-3之間的數字,代表不同的含義:x0dx0a0:不釋放(系統默認值)x0dx0a1:釋放頁緩存x0dx0a2:釋放dentries和inodesx0dx0a3:釋放所有緩存x0dx0ax0dx0a釋放完內存後改回去讓系統重新自動分配內存。x0dx0aecho 0 >/proc/sys/vm/drop_cachesx0dx0ax0dx0afree -m #看內存是否已經釋放掉了。x0dx0ax0dx0a如果我們需要釋放所有緩存,就輸入下面的命令:x0dx0aecho 3 > /proc/sys/vm/drop_cachesx0dx0ax0dx0a######### Linux釋放內存的相關知識 ###############x0dx0ax0dx0a在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空 間影響性能,例如當你在linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作為caching。,此時就需 要執行釋放內存(清理緩存)的操作了。x0dx0ax0dx0aLinux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分 緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉嗎?所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是 釋放緩存的操作了。/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改 /proc中的文件,來對當前kernel的行為做出調整.那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。要達到釋 放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就 是不釋放緩存。x0dx0ax0dx0a一般復制了文件後,可用內存會變少,都被cached佔用了,這是linux為了提高文件讀取效率的做法:為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。"x0dx0ax0dx0a釋放內存前先使用sync命令做同步,以確保文件系統的完整性,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。x0dx0ax0dx0a[[email protected] ~]# free -mx0dx0a total used free shared buffers cachedx0dx0aMem: 7979 7897 82 0 30 3918x0dx0a-/ buffers/cache: 3948 4031x0dx0aSwap: 4996 438 4558x0dx0ax0dx0a第一行用全局角度描述系統使用的內存狀況:x0dx0atotal 內存總數x0dx0aused 已經使用的內存數,一般情況這個值會比較大,因為這個值包括了cache 應用程序使用的內存x0dx0afree 空閑的內存數x0dx0ashared 多個進程共享的內存總額x0dx0abuffers 緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增加)x0dx0acached 緩存,用於已打開的文件x0dx0ax0dx0a第二行描述應用程序的內存使用:x0dx0a-buffers/cache 的內存數:used - buffers - cachedx0dx0abuffers/cache 的內存數:free buffers cachedx0dx0a前個值表示-buffers/cache 應用程序使用的內存大小,used減去緩存值x0dx0a後個值表示 buffers/cache 所有可供應用程序使用的內存大小,free加上緩存值x0dx0ax0dx0a第三行表示swap的使用:x0dx0aused 已使用x0dx0afree 未使用 x0dx0ax0dx0a可用的內存=free memory buffers cached。x0dx0ax0dx0a為什麼free這么小,是否關閉應用後內存沒有釋放?x0dx0a但實際上,我們都知道這是因為Linux對內存的管理與Windows不同,free小並不是說內存不夠用了,應該看的是free的第二行最後一個值:-/ buffers/cache: 3948 4031 ,這才是系統可用的內存大小。x0dx0a實際項目中的經驗告訴我們,如果因為是應用有像內存泄露、溢出的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難查看。我覺得既然核心是可以快速清空buffer或cache,但核心並沒有這樣做(默認值是0),我們不應該隨便去改變它。x0dx0a一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生內存不足、應用獲取不到可用內存、OOM錯 誤等問題時,還是更應該去分析應用方面的原因,如用戶量太大導致內存不足、發生應用內存溢出等情況,否則,清空buffer,強制騰出free的大小,可 能只是把問題給暫時屏蔽了,所以說一般情況下linux都不用經常手動釋放內存。
Ⅱ 如何在Linux操作系統中手工釋放內存緩存
要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:
0
–
不釋放
1
–
釋放頁緩存
2
–
釋放dentries和inodes
3
–
釋放所有緩存
知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。
首先我們需要使用sync指令,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的
i-node、已延遲的塊
I/O
和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。
#sync
接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:
#echo
3
>
/proc/sys/vm/drop_caches
此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。
要查詢當前緩存釋放的參數,可以輸入下面的指令:
#cat
/proc/sys/vm/drop_caches
下面我們來看一個實際測試:
先看看內存使用狀況
[root@node1
~]#
free
-m
total
used
free
shared
buffers
cached
Mem:
8004
6557
1446
0
163
5630
-/+
buffers/cache:
763
7240
Swap:
1983
0
1983
把內存里的數據暫時寫到硬碟里
[root@node1
~]#
sync
修改/proc/sys/vm/drop_caches文件
[root@node1
~]#
echo
3
>
/proc/sys/vm/drop_caches
[root@node1
~]#
cat
/proc/sys/vm/drop_caches
再看內存,終於釋放出來了。
[root@node1
~]#
free
-m
total
used
free
shared
buffers
cached
Mem:
8004
631
7372
0
0
60
-/+
buffers/cache:
570
7433
Swap:
1983
0
1983
Ⅲ Linux下如何釋放內存,swap分區滿了怎麼辦
swap的作用可簡單描述為:
當內存不夠用時,將存儲器中的數據塊從DRAM移到swap的磁碟空間中,以釋放更多的空間給當前進程使用.
當再次需要那些數據時,就可以將swap磁碟中的數據重新移到內存,而將那些不用的數據塊從內存移到swap中.
2)數據從內存移動交換區的行為被稱為頁面調用,發生在後台的頁面調用沒有來自應用程序的干涉.
3)swap空間是分頁的,每一頁的大小和內存頁的大小一樣.
4)並不是一定要給每個系統劃分SWAP,比如大多數的嵌入式就沒有swap.
##在執行以上操作以後,查看你的swap分區還是滿了,你首先查看一下你實際的內存剩多少空間,然後在查看自己的swap空間用了多少,首先提前保證實際剩餘的內存比你的swap的內存的空間要大,然後執行一下操作,否則會宕機的!
首先我們停掉swap分區,查看swap分區
swapon -s 會查看到你的swap分區是掛在哪裡!
然後比如說我的是掛到/dev/sda2
swapoff /dev/sda2
停止是需要一段時間的,因為他會把內存釋放到實際內存當中,
然後在啟動我們的swap分區
swapon -a
我們的swap分區內存已經成功釋放到了實際內存當中!
Ⅳ linux上如何閉掉一部分內存
在Linux系統下,_般不需要去釋放內存,因為系統已將內存管理的很好。但也有例外,有時內存會被緩存佔掉,導致系統使用SWAP空間影響性能,這時,有必要來_動進_Linux下釋放內存的操作,其實是釋放緩存的操作了。
proc是_個虛擬_件系統,我們可通過對它的讀寫操作做為與kernel實體間進_通信的_種_段.也就是說可通過修改/proc中的_件,來對當前kernel的_為做出調整.那麼可通過調整/proc/sys/vm/drop_caches來釋放內存。
Ⅳ linux清理內存緩存命令
看緩存的命令
free -m
清理緩存的命令
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo 0 是不釋放緩存
echo 1 是釋放頁緩存 《Linux就該這么學》
ehco 2 是釋放dentries和inodes緩存
echo 3 是釋放 1 和 2 中說道的的所有緩存
Ⅵ linux 如何釋放虛擬內存
swap釋放:
用swapoff -a 關閉虛擬內存(釋放)
再用swapon -a 打開虛擬內存
註:swapon / swapoff 必須要root許可權才能使用
Ⅶ linux怎麼強制釋放已使用內存
在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空間影響性能,此時就需要執行釋放內存(清理緩存)的操作了。
Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉么?
所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是釋放緩存的操作了。
要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:
0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放所有緩存
知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。
首先我們需要使用sync指令,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。
#sync
接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:
#echo 3 > /proc/sys/vm/drop_caches
此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。
要查詢當前緩存釋放的參數,可以輸入下面的指令:
#cat /proc/sys/vm/drop_caches
Ⅷ linux如何清理內存
1、使用free命令查看一下當前內存使用情況
free
Mem:
-/+buffers/cache:37832416243572
Swap:10241428010241428
#針對free命令後出現的信息解釋
#total:總計物理內存的大小
#used:已使用多大
#free:可用有多少
#Shared:多個進程共享的內存總額
#Buffers/cached:磁碟緩存的大小
2、執行sync同步數據
sync
#該命令將未寫的系統緩沖區寫到磁碟中
#包含已修改的i-node、已延遲的塊I/O和讀寫映射文件。
3、清理cache(緩存)
echo3>/proc/sys/vm/drop_caches
free
Mem:
-/+buffers/cache:27061616351280
Swap:10241428010241428
4、對比步驟1和3的free命令,used(減少)、free(增大)對應Mem部分就清楚了,cache(緩存)被清理掉了。
Ⅸ 如何手工釋放linux內存
一、通常情況
先來說說free命令:
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511
其中:
total 內存總數
used 已經使用的內存數
free 空閑的內存數
shared 多個進程共享的內存總額
buffers Buffer Cache和cached Page Cache 磁碟緩存的大小
-buffers/cache 的內存數:used – buffers – cached
+buffers/cache 的內存數:free + buffers + cached
可用的memory=free memory+buffers+cached。
有了這個基礎後,可以得知,我現在used為163MB,free為86MB,buffer和cached分別為10MB,94MB。
那麼我們來看看,如果我執行復制文件,內存會發生什麼變化.
[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511
在我命令執行結束後,used為244MB,free為4MB,buffers為8MB,cached為174MB,天吶,都被cached吃掉了。別緊張,這是為了提高文件讀取效率的做法。
為了提高磁碟存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換),還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
那麼有人說過段時間,linux會自動釋放掉所用的內存。等待一段時間後,我們使用free再來試試,看看是否有釋放?
[root@server test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511
似乎沒有任何變化。(實際情況下,內存的管理還與Swap有關)
那麼我能否手動釋放掉這些內存呢?回答是可以的!
二、手動釋放緩存
/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整。那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
首先,/proc/sys/vm/drop_caches的值,默認為0。
[root@server test]# sync
手動執行sync命令(描述:sync 命令運行 sync 子常式。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3
將/proc/sys/vm/drop_caches值設為3
[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再來運行free命令,會發現現在的used為66MB,free為182MB,buffers為0MB,cached為11MB。那麼有效的釋放了buffer和cache。