小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

linux怎么清除緩存(轉(zhuǎn))

 GLL_ 2019-02-20
?Linux 清除內(nèi)存中的cache

首先以Centos6.4的來說,Centos7有些區(qū)別

一、buffer/cache/swap的介紹

#cat /etc/redhat-release  #查看系統(tǒng)版本

CentOS release 6.4 (Final)  

#free -m  #查看緩沖區(qū)及內(nèi)存使用情況

                   total       used       free     shared    buffers     cached

Mem:          7814       7681        132          0         23       5727

-/+ buffers/cache:       1930       5884

Swap:         8191         32       8159



先看第二行Mem行:

Mem:          7814       7681        132          0         23       5727  #內(nèi)存總大小為7814MB,使用7681MB,空閑132MB,共享內(nèi)存0M,buffers:23MB,cached:5727MB

然后看地三行-/+ buffers/cache行:

-/+ buffers/cache:       1930       5884   #(-buffers/cache) used內(nèi)存數(shù):1930MB(指的第一部分Mem行中的used – buffers – cached),(+buffers/cache) free內(nèi)存數(shù):5884MB(指的第一部分Mem行中的free + buffers + cached),也就是說-buffers/cache反映的是被程序?qū)崒?shí)在在吃掉的內(nèi)存,而+buffers/cache反映的是可以挪用的內(nèi)存總數(shù).

然后看第四列Swap行:

Swap:         8191         32       8159 #這也就是我們經(jīng)常說的虛擬內(nèi)存,8192為swap分區(qū)的總大小為8192MB,32為swap分區(qū)的使用為32MB,8159為swap空閑為8159MB。



swap分區(qū)的作用:

Linux內(nèi)核為了提高讀寫效率與速度,會將文件在內(nèi)存中進(jìn)行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運(yùn)行結(jié)束后,Cache Memory也不會自動釋放。這就會導(dǎo)致你在Linux系統(tǒng)中程序頻繁讀寫文件后,你會發(fā)現(xiàn)可用物理內(nèi)存變少。當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當(dāng)前運(yùn)行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運(yùn)行時,再從Swap分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時,才進(jìn)行Swap交換。所以swap分區(qū)不被占用或者占用很少,說明現(xiàn)在系統(tǒng)內(nèi)存夠用,運(yùn)行還算良好,不會影響系統(tǒng)運(yùn)行。



首先,當(dāng)物理內(nèi)存不足以支撐系統(tǒng)和應(yīng)用程序(進(jìn)程)的運(yùn)作時,這個Swap交換分區(qū)可以用作臨時存放使用率不高的內(nèi)存分頁,把騰出的內(nèi)存交給急需的應(yīng)用程序(進(jìn)程)使用。有點(diǎn)類似機(jī)房的UPS系統(tǒng),雖然正常情況下不需要使用,但是異常情況下, Swap交換分區(qū)還是會發(fā)揮其關(guān)鍵作用。

其次,即使你的服務(wù)器擁有足夠多的物理內(nèi)存,也有一些程序會在它們初始化時殘留的極少再用到的內(nèi)存分頁內(nèi)容轉(zhuǎn)移到 swap 空間,以此讓出物理內(nèi)存空間。對于有發(fā)生內(nèi)存泄漏幾率的應(yīng)用程序(進(jìn)程),Swap交換分區(qū)更是重要,因?yàn)檎l也不想看到由于物理內(nèi)存不足導(dǎo)致系統(tǒng)崩潰。

最后,現(xiàn)在很多個人用戶在使用Linux,有些甚至是PC的虛擬機(jī)上跑Linux系統(tǒng),此時可能常用到休眠(Hibernate),這種情況下也是推薦劃分Swap交換分區(qū)的。

其實(shí)少量使用Swap交換空間是不會影響性能,只有當(dāng)RAM資源出現(xiàn)瓶頸或者內(nèi)存泄露,進(jìn)程異常時導(dǎo)致頻繁、大量使用交換分區(qū)才會導(dǎo)致嚴(yán)重性能問題。另外使用Swap交換分區(qū)頻繁,還會引起kswapd0進(jìn)程(虛擬內(nèi)存管理中, 負(fù)責(zé)換頁的)耗用大量CPU資源,導(dǎo)致CPU飆升。




空閑內(nèi)存/已用內(nèi)存換算(也可參考-/+ buffers/cache這行信息也是內(nèi)存正確使用率):

空閑內(nèi)存=free(132)+buffers(23)+cached(5727)=5882

已用內(nèi)存=total(7814)-空閑內(nèi)存(5882)=1932



buffers和cache的區(qū)別:

為了提高磁盤存取效率, Linux做了一些精心的設(shè)計(jì), 除了對dentry進(jìn)行緩存(用于VFS,加速文件路徑名到inode的轉(zhuǎn)換),還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了I/O系統(tǒng)調(diào)用(比如read,write,getdents)的時間。

磁盤的操作有邏輯級(文件系統(tǒng))和物理級(磁盤塊),這兩種Cache就是分別緩存邏輯和物理級數(shù)據(jù)的。

Page cache實(shí)際上是針對文件系統(tǒng)的,是文件的緩存,在文件層面上的數(shù)據(jù)會緩存到page cache。文件的邏輯層需要映射到實(shí)際的物理磁盤,這種映射關(guān)系由文件系統(tǒng)來完成。當(dāng)page cache的數(shù)據(jù)需要刷新時,page cache中的數(shù)據(jù)交給buffer cache,因?yàn)锽uffer Cache就是緩存磁盤塊的。但是這種處理在2.6版本的內(nèi)核之后就變的很簡單了,沒有真正意義上的cache操作。

Buffer cache是針對磁盤塊的緩存,也就是在沒有文件系統(tǒng)的情況下,直接對磁盤進(jìn)行操作的數(shù)據(jù)會緩存到buffer cache中,例如,文件系統(tǒng)的元數(shù)據(jù)都會緩存到buffer cache中。

Buffer:緩沖區(qū),一個用于存儲速度不同步的設(shè)備或優(yōu)先級不同的設(shè)備之間傳輸數(shù)據(jù)的區(qū)域。通過緩沖區(qū),可以使進(jìn)程之間的相互等待變少,從而使從速度慢的設(shè)備讀入數(shù)據(jù)時,速度快的設(shè)備的操作進(jìn)程不發(fā)生間斷。

緩沖(buffers)是根據(jù)磁盤的讀寫設(shè)計(jì)的,把分散的寫操作集中進(jìn)行,減少磁盤碎片和硬盤的反復(fù)尋道,從而提高系統(tǒng)性能。linux有一個守護(hù)進(jìn)程定 期清空緩沖內(nèi)容(即寫如磁盤),也可以通過sync命令手動清空緩沖。

簡單說來,page cache用來緩存文件數(shù)據(jù),buffer cache用來緩存磁盤數(shù)據(jù)。在有文件系統(tǒng)的情況下,對文件操作,那么數(shù)據(jù)會緩存到page cache,如果直接采用dd等工具對磁盤進(jìn)行讀寫,那么數(shù)據(jù)會緩存到buffer cache。

所以我們看linux,只要不用swap的交換空間,就不用擔(dān)心自己的內(nèi)存太少.如果常常swap用很多,可能你就要考慮加物理內(nèi)存了.這也是linux看內(nèi)存是否夠用的標(biāo)準(zhǔn).


Cache: 高速緩存,是位于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲器。由于CPU的速度遠(yuǎn)高于主內(nèi)存,CPU直接從內(nèi)存中存取數(shù)據(jù)要等待一定時間周 期,Cache中保存著CPU剛用過或循環(huán)使用的一部分?jǐn)?shù)據(jù),當(dāng)CPU再次使用該部分?jǐn)?shù)據(jù)時可從Cache中直接調(diào)用,這樣就減少了CPU的等待時間,提 高了系統(tǒng)的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache集成在CPU內(nèi)部,L2 Cache早期一般是焊在主板上,現(xiàn)在也都集成在CPU內(nèi)部,常見的容量有256KB或512KB L2 Cache。
如果 cache 的值很大,說明cache住的文件數(shù)很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀IO bi會非常小。

緩存(cached)是把讀取過的數(shù)據(jù)保存起來,重新讀取時若命中(找到需要的數(shù)據(jù))就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數(shù)據(jù)會根據(jù)讀取頻率進(jìn)行組織,把最頻繁讀取的內(nèi)容放在最容易找到的位置,把不再讀的內(nèi)容不斷往后排,直至從中刪除。


注:下面是Centos7.2系統(tǒng)free -m的顯示:

#free -m

              total        used        free      shared  buff/cache   available

Mem:          64252        2924         258        3233       61069       57654

Swap:          8191         144        8047



博文來自:www.51niux.com

二、內(nèi)存查看命令

2.1 用free加各種參數(shù)例如:

命令參數(shù):

-b  以Byte為單位顯示內(nèi)存使用情況。 

-k  以KB為單位顯示內(nèi)存使用情況。 

-m  以MB為單位顯示內(nèi)存使用情況。

-g   以GB為單位顯示內(nèi)存使用情況。 

-o  不顯示緩沖區(qū)調(diào)節(jié)列。 

-s<間隔秒數(shù)>  持續(xù)觀察內(nèi)存使用狀況。 

-t  顯示內(nèi)存總和列。 

-V  顯示版本信息。

# free -k -s 1 #顯示單位為KB,然后每一秒刷新一次。

但是這也只能顯示一個總量,如果內(nèi)存真的是被使用了,我們應(yīng)該如何查詢哪些進(jìn)程占用內(nèi)存過大呢?

2.2 top命令

執(zhí)行top,然后按shift+M,可以對進(jìn)行使用內(nèi)存情況從大到小排序





2.3 ps命令

# ps -aux|sort -k 4 -n  #為了查看方便,讓其從小到大排序



第一列:USER  用戶名

第二列:PID 進(jìn)程ID

第三列:%CPU 進(jìn)程的cpu占用率

第四列:%MEM 進(jìn)程的內(nèi)存占用率

第五列:VSZ 虛擬內(nèi)存中進(jìn)程的大小,單位KB

第六列:RSS 進(jìn)程實(shí)際內(nèi)存大小,單位KB

第七列:TTY 與進(jìn)程關(guān)聯(lián)的終端(tty)

第八列:STAT 進(jìn)程的狀態(tài)

下面為STAT的狀態(tài)碼:

R 運(yùn)行    Runnable (on run queue)            正在運(yùn)行或在運(yùn)行隊(duì)列中等待。
S 睡眠    Sleeping                休眠中, 受阻, 在等待某個條件的形成或接受到信號。
I 空閑    Idle
Z 僵死    Zombie(a defunct process)        進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放。
D 不可中斷    Uninterruptible sleep (ususally IO)    收到信號不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生。
T 終止    Terminate                進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運(yùn)行運(yùn)行。
P 等待交換頁
W 無駐留頁    has no resident pages        沒有足夠的記憶體分頁可分配。
X 死掉的進(jìn)程
< 高優(yōu)先級進(jìn)程                    高優(yōu)先序的進(jìn)程
N 低優(yōu)先    級進(jìn)程                    低優(yōu)先序的進(jìn)程
L 內(nèi)存鎖頁    Lock                有記憶體分頁分配并縮在記憶體內(nèi)
s 進(jìn)程的領(lǐng)導(dǎo)者(在它之下有子進(jìn)程);
l 多進(jìn)程的(使用 CLONE_THREAD, 類似 NPTL pthreads)
+ 位于后臺的進(jìn)程組

第九列:START  進(jìn)程啟動時間和日期

第十列:TIME  進(jìn)程使用的總cpu時間

第十一列: COMMAND 正在執(zhí)行的命令行命令

注:如果要進(jìn)一步排查內(nèi)存占用問題,可以用# pstree PID -ap #樹狀圖的顯示進(jìn)程間的關(guān)系,默認(rèn)PID為1,也就是全部

# ps -eo user,pid,command|grep mysql  #查出mysql的uid

# pstree 3584 -ap  #查看mysql下面都有哪些進(jìn)程



注:pgrep

pgrep命令以名稱為依據(jù)從運(yùn)行進(jìn)程隊(duì)列中查找進(jìn)程,并顯示查找到的進(jìn)程id。每一個進(jìn)程ID以一個十進(jìn)制數(shù)表示,通過一個分割字符串和下一個ID分開,默認(rèn)的分割字符串是一個新行。對于每個屬性選項(xiàng),用戶可以在命令行上指定一個以逗號分割的可能值的集合

參數(shù): -o:僅顯示找到的最?。ㄆ鹗迹┻M(jìn)程號; -n:僅顯示找到的最大(結(jié)束)進(jìn)程號; -l:顯示進(jìn)程名稱; -P:指定父進(jìn)程號; -g:指定進(jìn)程組; -t:指定開啟進(jìn)程的終端; -u:指定進(jìn)程的有效用戶ID。

# pgrep -l mysqld  

3584 mysqld_safe

3752 mysqld



博文來自:www.51niux.com

2.4  #cat /proc/meminfo  #又或者說,我發(fā)現(xiàn)系統(tǒng)占用內(nèi)存不大,內(nèi)存都被緩存起來了,想看看內(nèi)存使用的詳細(xì)信息。

#cat /proc/meminfo

MemTotal:        8002048 kB   #所有可用RAM大?。次锢韮?nèi)存減去一些預(yù)留位和內(nèi)核的二進(jìn)制代碼大小)

MemFree:          141316 kB   #LowFree和HighFree的綜合,被系統(tǒng)留著未使用的內(nèi)存

Buffers:            3492 kB    #用來給文件做緩沖大小

Cached:          5850688 kB   #被高速緩沖存儲器(cache memory)用的內(nèi)存的大小

SwapCached:         1004 kB  #被高速緩沖存儲器(cache memory)用的交換空間的大小

Active:          3685356 kB  #在活躍使用中的緩沖或高速緩沖存儲器頁面文件的大小,除非非常必要否則不會被移作他用.

Inactive:        3634468 kB  # 在不經(jīng)常使用中的緩沖或高速緩沖存儲器頁面文件的大小,可能被用于其他途徑.

Active(anon):     760408 kB  

Inactive(anon):   706016 kB

Active(file):    2924948 kB

Inactive(file):  2928452 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:       8388600 kB   #交換空間的總大小

SwapFree:        8355464 kB   #未被使用交換空間的大小

Dirty:             60612 kB   #等待被寫回到磁盤的內(nèi)存大小

Writeback:            44 kB  #正在被寫回到磁盤的內(nèi)存大小

AnonPages:       1465384 kB  #未映射頁的內(nèi)存大小

Mapped:            10028 kB  #設(shè)備和文件等映射的大小

Shmem:               128 kB  

Slab:             393984 kB   #內(nèi)核數(shù)據(jù)結(jié)構(gòu)緩存的大小,可以減少申請和釋放內(nèi)存帶來的消耗。

SReclaimable:     314272 kB  #可收回Slab的大小

SUnreclaim:        79712 kB   #不可收回Slab的大?。⊿Unreclaim+SReclaimable=Slab)

KernelStack:        6656 kB

PageTables:        13848 kB  #管理內(nèi)存分頁頁面的索引表的大小。

NFS_Unstable:          0 kB   #不穩(wěn)定頁表的大小

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:    12389624 kB

Committed_AS:    6404932 kB

VmallocTotal:   34359738367 kB   #可以vmalloc虛擬內(nèi)存大小

VmallocUsed:      291660 kB  #已經(jīng)被使用的虛擬內(nèi)存大小

VmallocChunk:   34359426484 kB  

HardwareCorrupted:     0 kB

AnonHugePages:    243712 kB

HugePages_Total:       0    #內(nèi)存大頁的總數(shù)

HugePages_Free:        0    #內(nèi)存大頁剩余數(shù)量

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB  #內(nèi)存大頁的大?。?4位操作系統(tǒng)中有2MB/1GB兩種,默認(rèn)是2MB。)

DirectMap4k:        4096 kB

DirectMap2M:     2084864 kB

DirectMap1G:     6291456 kB



博文來自:www.51niux.com

三、手工釋放內(nèi)存區(qū)緩存(這是只是記錄,但是不建議操作,本來cache就是為了提升系統(tǒng)性能,是linux區(qū)別于windows的優(yōu)勢所在,緩解磁盤的壓力,如果真有必要可手工釋放一下,也不要永久的的讓cache作用無法發(fā)揮)

# sync; echo 1 > /proc/sys/vm/drop_caches  #釋放 pagecache

# sync; echo 2 > /proc/sys/vm/drop_caches    #釋放  dentries 和 inodes:

# sync; echo 3 > /proc/sys/vm/drop_caches  #釋放 pagecache,dentries 和 inodes:

# sync; echo 0 > /proc/sys/vm/drop_caches  #默認(rèn)0為不釋放,讓系統(tǒng)自己調(diào)節(jié)

注:

操作前要使用sync,強(qiáng)制將內(nèi)存中內(nèi)容寫入硬盤,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。這一步是確保第二步的安全性。防止數(shù)據(jù)或操作丟失。

linux內(nèi)核2.6和內(nèi)核3系列的區(qū)別:

內(nèi)核2.6的版本執(zhí)行上述的操作都沒問題的,但是到了內(nèi)核3系列,就不能執(zhí)行echo 0 >/proc/sys/vm/drop_caches的操作了,這是一個坑,重啟才能改回去

# echo 0 >/proc/sys/vm/drop_caches

-bash: echo: write error: Invalid argument

# sysctl -a|grep vm.drop_caches  #內(nèi)核中有這個參數(shù)

vm.drop_caches = 3

# sysctl -w vm.drop_caches=0  #也寫不進(jìn)去,這個在內(nèi)核2.6系列上面可以的,這也是手工釋放內(nèi)存緩存的另一種形式(sysctl -w vm.drop_caches=3)

error: "Invalid argument" setting key "vm.drop_caches"

# sysctl -w vm.drop_caches=1  #執(zhí)行其他的是沒問題的,但是就是執(zhí)行0的插入不可以,要重啟服務(wù)器。

vm.drop_caches = 1



注:

swap清理:
swapoff -a && swapon -a
注意:這樣清理有個前提條件,空閑的內(nèi)存必須比已經(jīng)使用的swap空間大。



上述只是暫時生效,但是系統(tǒng)重啟后,系統(tǒng)還是按照自己默認(rèn)的方法去使用緩存,有的網(wǎng)友會寫定時任務(wù)腳本晚上去釋放一下內(nèi)存cache,還有一種暴力的永久生效的方法,使cache的作用基本無法發(fā)揮。

修改/etc/sysctl.conf 添加如下選項(xiàng)后就不會內(nèi)存持續(xù)增加(這些配置摘抄自網(wǎng)上,未做測試,只是記錄一下)
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

#下面是相關(guān)解釋:

/proc/sys/vm/dirty_ratio

這個參數(shù)控制文件系統(tǒng)的文件系統(tǒng)寫緩沖區(qū)的大小,單位是百分比,表示系統(tǒng)內(nèi)存的百分比,表示當(dāng)寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,開始向磁盤寫出數(shù)據(jù)。增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當(dāng)你需要持續(xù)、恒定的寫入場合時,應(yīng)該降低其數(shù)值,一般啟動上缺省是 10。設(shè)1加速程序速度

/proc/sys/vm/dirty_background_ratio

這個參數(shù)控制文件系統(tǒng)的pdflush進(jìn)程,在何時刷新磁盤。單位是百分比,表示系統(tǒng)內(nèi)存的百分比,意思是當(dāng)寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,pdflush開始向磁盤寫出數(shù)據(jù)。增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當(dāng)你需要持續(xù)、恒定的寫入場合時,應(yīng)該降低其數(shù)值,一般啟動上缺省是 5

/proc/sys/vm/dirty_writeback_centisecs

這個參數(shù)控制內(nèi)核的臟數(shù)據(jù)刷新進(jìn)程pdflush的運(yùn)行間隔。單位是 1/100 秒。缺省數(shù)值是500,也就是 5 秒。如果你的系統(tǒng)是持續(xù)地寫入動作,那么實(shí)際上還是降低這個數(shù)值比較好,這樣可以把尖峰的寫操作削平成多次寫操

/proc/sys/vm/dirty_expire_centisecs

這個參數(shù)聲明Linux內(nèi)核寫緩沖區(qū)里面的數(shù)據(jù)多“舊”了之后,pdflush進(jìn)程就開始考慮寫到磁盤中去。單位是 1/100秒。缺省是 30000,也就是 30秒的數(shù)據(jù)就算舊了,將會刷新磁盤。對于特別重載的寫操作來說,這個值適當(dāng)縮小也是好的,但也不能縮小太多,因?yàn)榭s小太多也會導(dǎo)致IO提高太快。建議設(shè)置為 1500,也就是15秒算舊。

/proc/sys/vm/drop_caches

釋放已經(jīng)使用的cache

/proc/sys/vm/page-cluster

該文件表示在寫一次到swap區(qū)的時候?qū)懭氲捻撁鏀?shù)量,0表示1頁,1表示2頁,2表示4頁。

/proc/sys/vm/swapiness

該文件表示系統(tǒng)進(jìn)行交換行為的程度,數(shù)值(0-100)越高,越可能發(fā)生磁盤交換。

/proc/sys/vm/vfs_cache_pressure

該文件表示內(nèi)核回收用于directory和inode cache內(nèi)存的傾向

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多