linux free命令以及系統(tǒng)內(nèi)存占用過高的處理方式
linux free 命令以及系統(tǒng)內(nèi)存占用過高的處理
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 3770 228 3270 11 271 3285 Swap: 8190 0 8190
第一行Mem,表示物理內(nèi)存統(tǒng)計(jì)
total
:總內(nèi)存大小used
:已使用內(nèi)存大小free
:當(dāng)前空閑內(nèi)存大小shared
:多個(gè)進(jìn)程共享的內(nèi)存總額buffers
/cached
:緩存內(nèi)存數(shù)據(jù)
第二行-/+ buffers/cache:
(1)used 實(shí)際使用的內(nèi)存,等于第一行的 used - buffers - cached
(2)free 實(shí)際可用內(nèi)存,等于第一行的 free + buffers + cached
內(nèi)存占用計(jì)算公式used/(used+free)
第三行Swap表示交換區(qū)的使用情況,也就是我們通常所說的虛擬內(nèi)存。
free常用參數(shù)
free -b
#以Byte為單位顯示內(nèi)存使用情況free -k
#以KB為單位顯示內(nèi)存使用情況,也是默認(rèn)參數(shù)free -m
#以MB為單位顯示內(nèi)存使用情況free -g
#以GB為單位顯示內(nèi)存使用情況free -s<數(shù)字>
#間隔數(shù)字秒數(shù)刷新顯示內(nèi)存使用情況free -t
#顯示內(nèi)存總和列free -V
#顯示當(dāng)前版本
在Linux系統(tǒng)下,我們一般不需要去釋放內(nèi)存,因?yàn)橄到y(tǒng)已經(jīng)將內(nèi)存管理的很好。但是凡事也有例外,有的時(shí)候內(nèi)存會(huì)被緩存占用掉,導(dǎo)致系統(tǒng)使用SWAP空間影響性能,此時(shí)就需要執(zhí)行釋放內(nèi)存(清理緩存)的操作了。
Linux系統(tǒng)的緩存機(jī)制是相當(dāng)先進(jìn)的,他會(huì)針對(duì)dentry(用于VFS,加速文件路徑名到inode的轉(zhuǎn)換)、Buffer Cache(針對(duì)磁盤塊的讀寫)和Page Cache(針對(duì)文件inode的讀寫)進(jìn)行緩存操作。
但是在進(jìn)行了大量文件操作之后,緩存會(huì)把內(nèi)存資源基本用光。但實(shí)際上我們文件操作已經(jīng)完成,這部分緩存已經(jīng)用不到了。
這個(gè)時(shí)候,我們難道只能眼睜睜的看著緩存把內(nèi)存空間占據(jù)掉么?
所以,我們還是有必要來手動(dòng)進(jìn)行Linux下釋放內(nèi)存的操作,其實(shí)也就是釋放緩存的操作了。
要達(dá)到釋放緩存的目的,我們首先需要了解下關(guān)鍵的配置文件/proc/sys/vm/drop_caches。
這個(gè)文件中記錄了緩存釋放的參數(shù),默認(rèn)值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數(shù)字,代表著不同的含義:
- 0 – 不釋放
- 1 – 釋放頁(yè)緩存
- 2 – 釋放dentries和inodes
- 3 – 釋放所有緩存
知道了參數(shù)后,我們就可以根據(jù)我們的需要,使用下面的指令來進(jìn)行操作。
首先我們需要使用sync指令,將所有未寫的系統(tǒng)緩沖區(qū)寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會(huì)丟失未保存的文件。
#sync
接下來,我們需要將需要的參數(shù)寫進(jìn)/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:
#echo 3 > /proc/sys/vm/drop_caches
此指令輸入后會(huì)立即生效,可以查詢現(xiàn)在的可用內(nèi)存明顯的變多了。
要查詢當(dāng)前緩存釋放的參數(shù),可以輸入下面的指令:
cat /proc/sys/vm/drop_caches
1.清理前內(nèi)存使用情況
free -m
2.開始清理
echo 1 > /proc/sys/vm/drop_caches
3.清理后內(nèi)存使用情況
free -m
4.完成
查看內(nèi)存條數(shù)命令:
dmidecode | grep -A16 "Memory Device$"
linux 內(nèi)存 占用較高問題排查
查看內(nèi)存情況
#按 k 查看
free
#按兆M查看
free -m
total
:總計(jì)物理內(nèi)存的大小。used
:已使用多大。free
:可用有多少。Shared
:多個(gè)進(jìn)程共享的內(nèi)存總額。Buffers
/cached
:磁盤緩存的大小。
#所以空閑內(nèi)存=free+buffers+cached=total-used
內(nèi)存的使用情況
cat /proc/meminfo
查看進(jìn)程的內(nèi)存占用
pidstat -r -p 24427 1 5
內(nèi)存占用高的前20
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20
動(dòng)態(tài)查看內(nèi)存占用
slabtop
問題定位
cached 占用過高問題
buffer,cached的作用:
cached主要負(fù)責(zé)緩存文件使用, 日志文件過大造成cached區(qū)內(nèi)存增大把內(nèi)存占用完 .
Free中的buffer和cache:(它們都是占用內(nèi)存):
buffer
: 作為buffer cache的內(nèi)存,是塊設(shè)備(磁盤)的緩沖區(qū),包括讀、寫磁盤cache
: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache,包括讀、寫文件
如果 cache 的值很大,說明cache住的文件數(shù)很多。
linux服務(wù)器會(huì)自動(dòng)釋放內(nèi)存,保障系統(tǒng)運(yùn)行,但只會(huì)釋放夠用的內(nèi)存,而不會(huì)去釋放更多的內(nèi)存。
解決方法:
手動(dòng)釋放cached方法有三種(系統(tǒng)默認(rèn)值是0,釋放之后你需要再改回0值):
釋放前最好sync一下,防止丟數(shù)據(jù)
sync 在啟動(dòng)機(jī)器或關(guān)機(jī)之前一定要運(yùn)行sync命令。記住在任何情況下,慎重地執(zhí)行sync命令決不會(huì)有任何壞處,sync命令強(qiáng)制把磁盤緩沖的所有數(shù)據(jù)寫入磁盤
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 echo 1 > /proc/sys/vm/drop_caches
#清除后要還原系統(tǒng)默認(rèn)配置:
echo 0 > /proc/sys/vm/drop_caches
#查看設(shè)置
sysctl -a | grep drop_caches
補(bǔ)充: echo 字符串 > 文件 就是把字符串內(nèi)容從定向到文件中
這時(shí)查看 free 可以看到 cached 降低了很多
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vscode遠(yuǎn)程免密登入Linux服務(wù)器的配置方法
這篇文章主要介紹了配置vscode遠(yuǎn)程免密登入Linux服務(wù)器的操作方法,主要包括windows端操作和linux服務(wù)端操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06詳解Linux運(yùn)維CentOS系統(tǒng)SVN雙備份Shell腳本
本篇文章主要介紹了詳解Linux運(yùn)維CentOS系統(tǒng)SVN雙備份Shell腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06linux如何啟動(dòng)openoffice服務(wù)
這篇文章主要介紹了linux如何啟動(dòng)openoffice服務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09Apache 二級(jí)域名實(shí)現(xiàn)方法介紹
首先,你的擁有一個(gè)有泛域名解析的頂級(jí)域名,例如:domain.com2009-05-05apache使用.htaccess文件實(shí)現(xiàn)屏蔽wget下載網(wǎng)站內(nèi)容
wget是一個(gè)從網(wǎng)絡(luò)上自動(dòng)下載文件的自由工具,支持通過HTTP、HTTPS、FTP三個(gè)最常見的TCP/IP協(xié)議下載,并可以使用HTTP代理。wget名稱的由來是“World Wide Web”與“get”的結(jié)合。2014-07-07Linux中關(guān)于sed命令的6個(gè)高級(jí)用法
這篇文章主要介紹了Linux中關(guān)于sed命令的6個(gè)高級(jí)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02