1. 程式人生 > >linux 記憶體清理/釋放命令

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

----------------------------------------------------------------

1.清理前記憶體使用情況 
free -m
 

2.開始清理  
echo 1 > /proc/sys/vm/drop_caches



3.清理後記憶體使用情況 
free -m

4.完成!

檢視記憶體條數命令:
 

dmidecode | grep -A16 "Memory Device$"

  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# sync
# echo 1 > /proc/sys/vm/drop_caches
  echo 2 > /proc/sys/vm/drop_caches
  echo 3 > /proc/sys/vm/drop_caches

cache釋放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

說明,釋放前最好sync一下,防止丟資料。

因為LINUX的核心機制,一般情況下不需要特意去釋放已經使用的cache。這些cache起來的內容可以增加檔案以及的讀寫速度。
先說下free命令怎麼看記憶體

[[email protected] proc]# free

total   used   free     shared buffers cached
Mem: 515588 295452 220136 0      2060   64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全域性角度描述系統使用的記憶體狀況:
total——總實體記憶體
used——已使用記憶體,一般情況這個值會比較大,因為這個值包括了cache+應用程式使用的記憶體
free——完全未被使用的記憶體
shared——應用程式共享記憶體
buffers——快取,主要用於目錄方面,inode值等(ls大目錄可看到這個值增加)
cached——快取,用於已開啟的檔案
note:
    total=used+free
    used=buffers+cached (maybe add shared also)

第二行描述應用程式的記憶體使用:
前個值表示-buffers/cache——應用程式使用的記憶體大小,used減去快取值
後個值表示+buffers/cache——所有可供應用程式使用的記憶體大小,free加上快取值
note:
   -buffers/cache=used-buffers-cached
   +buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

手動執行sync命令(描述:sync 命令執行 sync 子例程。如果必須停止系統,則執行 sync 命令以確保檔案系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案)
 

[[email protected] test]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] test]# cat /proc/sys/vm/drop_caches

                            
!將/proc/sys/vm/drop_caches值設為3

有關/proc/sys/vm/drop_caches的用法在下面進行了說明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

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

相關推薦

Linux記憶體清理/釋放命令

NameNode節點忽然掛了,重啟後提示OOM,但是這臺測試機的記憶體是16G的,只運行了Namenode和Jenkins,不至於OOM。於是使用free命令檢視,發現cached的快取有10G。很不正常,於是需要進行快取釋放。echo 1 > /proc/sys/vm/drop_caches此時在使用

linux 記憶體清理/釋放命令

在Linux系統下,我們一般不需要去釋放記憶體,因為系統已經將記憶體管理的很好。但是凡事也有例外,有的時候記憶體會被快取佔用掉,導致系統使用SWAP空間影響效能,此時就需要執行釋放記憶體(清理快取)的操作了。 Linux系統的快取機制是相當先進的,他會針對dentry(用於

linux 記憶體 cpu常用命令

1.檢視cpu命令: cat /proc/cpuinfo|grep "model name" && cat /proc/cpuinfo |grep "physical id"   2.檢視記憶體命令: cat /proc/meminfo|grep

關於linux 記憶體重複釋放的問題

記憶體申請函式malloc,對應的釋放函式為free,多次釋放會造成系統未知問題,鑑於free對指標指向NULL的指標釋放後不會有任何操作,因此有必要在釋放後將指標清0。但有時候將指標傳給其它函式時,比如被其它函式呼叫後再釋放就可能要注意點,如下函式 #include &l

Linux記憶體cached釋放

我們用free命令檢視系統記憶體使用情況的時候會發現: #free -m              total       used       free     shared    buffers     cachedMem:         24359    

CentOS7(Linux清理yum快取 和釋放記憶體方法

清理yum快取 清理yum快取使用yum clean 命令,yum clean 的引數有headers, packages, metadata, dbcache, plugins, expire-cache, rpmdb, all yum clean h

linux清理緩存,以釋放內存

無奈 inux 程序 釋放 trie linux 目錄 打開 nbsp [[email protected]/* */ src]# free total used free shared buff

Delphi清理釋放本程式記憶體的程式碼

zt    http://www.abcxd.com/delphi/abcxddelphi/delphiZY/SetProcessWorkingSetSize.html 明生注:請注意中間那段揭密文章,來按照自己的個人意願來執行。不要貪一時的快感而影響穩定性

Linux基礎 之 at 命令 延遲&定時命令 和 臨時檔案的清理

一、延遲命令    at 1.系統的延遲命令 at   時間 在/mnt 下新建檔案touch /mnt/file{1..6} watch -n 1 'ls -l /mnt'用監控命令監控 在另外的shell中測試: 第一種

LINUX下檢視CPU、記憶體使用率的命令

1.top 使用許可權:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 說明:即時顯示process的動態 d :改變顯示的更新速度,或是在交談式指令列( interactive command)按s

Linux基本命令10:檢視記憶體的使用命令

1.top命令 PID:當前執行程序的ID USER:程序屬主 PR:每個程序的優先級別 NInice:反應一個程序“優先順序”狀態的值,其取值範圍是-20至19,一     共40個級別。這個值越

手工釋放linux記憶體——/proc/sys/vm/drop cache

linux的記憶體檢視:[[email protected] 0.1.0]# free -m                   total       used       free     shared    buffers     cachedMem:          4032       

Linux記憶體模型與top命令的關係

實體記憶體、虛擬記憶體與交換空間 實體記憶體是記憶體條上的空間。 虛擬記憶體不同於實體記憶體,虛擬記憶體是作業系統對程序地址空間管理(process address space management)而設計的一個邏輯記憶體空間。虛擬記憶體通過頁對映表(page table)對映到實體記

Linux記憶體buff/cache清理

系統頻繁大量讀寫檔案會造成記憶體buff/cache過高,比如:   此時可以用以下命令進行清理: sync;echo 1 >/proc/sys/vm/drop_caches  清理pagecache sync;echo 2 >/proc/sys/vm/drop_caches

spark on yarn模式裡需要有時手工釋放linux記憶體

歡迎您的加入! 微信公眾號平臺: 大資料躺過的坑 微信公眾號平臺: 人工智慧躺過的坑 大資料和人工智慧躺過的坑(總群): 161156071 更多QQ技術分群,詳情請見:http://www.cnblogs.com/zls

Linux入門:常用命令:檢視硬碟、分割槽、CPU、記憶體資訊

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   學習是一

(jvm調優)一、linux記憶體檢視命令

1.整體情況檢視(工作管理員):top 第三行就是CPU的使用情況了,如下: %Cpu(s)us使用者空間佔用CPU百分比sy核心空間佔用CPU百分比ni使用者程序空間內改變過優先順序的程序佔用CPU百分比id空閒CPU百分比wa等待輸入輸出的CPU時間百

Linux記憶體 Buffer和Cache的區別及Linux中檢視記憶體命令free

一. Linux中檢視記憶體的命令free (1) free檢視的內在預設是以kb為單位,如果想以MB為單位檢視用命令 free -m     二.Linux記憶體 Buffer和Cache的區別 A buffer is something that has ye

linux下用echo命令清理日誌,清理完畢之後不需要重啟

echo "" > /usr/local/tomcat/tms2api.wuliusys.com/logs/catalina.out 這裡是清理在linux下catalina.out tomcat的日誌, 這裡 就是用echo "" > 後面跟目標路徑 將其

linux下使用free命令檢視實際記憶體佔用(可用記憶體

轉:http://blog.is36.com/linux_free_command_for_memory/ linux下在終端環境下可以使用free命令看到系統實際使用記憶體的情況,一般用free -m方式檢視記憶體佔用情況(兆為單位)。而系統實際可用記憶體是不是f