導航:首頁 > 編程系統 > linuxbufferscached

linuxbufferscached

發布時間:2023-01-16 00:30:48

linux中Cache內存佔用過高解決辦法

在Linux系統中,我們經常用free命令來查看系統內存的使用狀態。

默認顯示單位是kb,我的伺服器是128G內存,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(我是說比例越少)。一般情況下,對此命令輸出的理解可以分這幾個層次:

1.  不了解。這樣的人的第一反應是:天啊,內存用了好多,70個多G,可是我幾乎沒有運行什麼大程序啊?為什麼會這樣?Linux好占內存!

2.  自以為很了解。這樣的人一般評估過會說:嗯,根據我專業的眼光看的出來,內存才用了17G左右,還有很多剩餘內存可用。buffers/cache佔用的較多,說明系統中有進程曾經讀寫過文件,但是不要緊,這部分內存是當空閑來用的。

3.   真的很了解。這種人的反應反而讓人感覺最不懂Linux,他們的反應是:free顯示的是這樣,好吧我知道了。神馬?你問我這些內存夠不夠,我當然不知道啦!我怎麼知道你程序怎麼寫的?

4.   根據目前網路上技術文檔的內容,我相信絕大多數了解一點Linux的人應該處在第二種層次。大家普遍認為,buffers和cached所佔用的內存空間是可以在內存壓力較大的時候被釋放當做空閑空間用的。但真的是這樣么?

在論證這個題目之前,我們先簡要介紹一下buffers和cached是什麼意思:

Free中的buffer和cache:(它們都是佔用內存):

buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區

cache: 作為page cache的內存, 文件系統的cache

如果 cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那麼磁碟的讀IO bi會非常小。

cache是高速緩存,用於CPU和內存之間的緩沖;

buffer

是I/O緩存,用於內存和硬碟的緩沖

buffer和 cache 是兩個在計算機技術中被用濫的名詞,放在不通語境下會有不同的意義。在Linux的內存管理中,這里的buffer指Linux內存的:Buffer cache。這里的cache指Linux內存中的:Page

cache。翻譯成中文可以叫做緩沖區緩存和頁面緩存。在歷史上,它們一個(buffer)被用來當成對io設備寫的緩存,而另一個(cache)被用來當作對io設備的讀緩存,這里的io設備,主要指的是塊設備文件和文件系統上的普通文件。但是現在,它們的意義已經不一樣了。在當前的內核中,page cache顧名思義就是針對內存頁的緩存,說白了就是,如果有內存是以page進行分配管理的,都可以使用page cache作為其緩存來管理使用。當然,不是所有的內存都是以頁(page)進行管理的,也有很多是針對塊(block)進行管理的,這部分內存使用如果要用到cache功能,則都集中到buffer cache中來使用。(從這個角度出發,是不是buffer cache改名叫做block cache更好?)然而,也不是所有塊(block)都有固定長度,系統上塊的長度主要是根據所使用的塊設備決定的,而頁長度在X86上無論是32位還是64位都是4k。

明白了這兩套緩存系統的區別,就可以理解它們究竟都可以用來做什麼了。

Page cache主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作為可以映射文件到內存的系統調用:mmap是不是很自然的也應該用到page cache?在當前的系統實現里,page cache也被作為其它文件類型的緩存設備來用,所以事實上page cache也負責了大部分的塊設備文件的緩存工作。

Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。一般情況下兩個緩存系統是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,並記錄是哪一個緩沖區被修改了。這樣,內核在後續執行臟數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那麼在內存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。

但是這種清緩存的工作也並不是沒有成本。理解cache是干什麼的就可以明白清緩存必須保證cache中的數據跟對應文件中的數據一致,才能對cache進行 釋放 。所以伴隨著cache清除的行為的,一般都是系統IO飆高。因為內核要對比cache中的數據和對應硬碟文件上的數據是否一致,如果不一致需要寫回,之後才能回收。

在系統中除了內存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發緩存清除的操作:

[root@tencent64 ~]# cat /proc/sys/vm/drop_caches 

1

方法是:

echo 1 > /proc/sys/vm/drop_caches

當然,這個文件可以設置的值分別為1、2、3。它們所表示的含義為:

sync //先做同步數據 防止數據部分丟失

echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。

echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的pagecache。

echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的緩存對象。

#!/bin/bashecho       "開始清理緩存"

sync;sync;sync        #寫入硬碟,防止數據丟失

sleep 10                      #延遲10秒

echo 1 > /proc/sys/vm/drop_cachesecho                  "清理結束"

設置定時任務

crontab -e

* 0 * * * /root/cleanBuff.sh                       

crontab -l                   //查看是否設置成功

❷ linux查看內存使用情況

top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。可以直接使用top命令後,查看%MEM的內容,可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令$top-uoracle。

內容解釋PID進程的ID,USER進程所有者,PR進程的優先順序別,越小越優先被執行,NInice值,VIRT進程佔用的虛擬內存,RES進程佔用的物理內存,SHR進程使用的共享內存,S進程的狀態,S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數。

%CPU進程佔用CPU的使用率,%MEM進程使用的物理內存和總內存的百分比,TIME+該進程啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值,COMMAND進程啟動命令名稱。

在命令行中輸入top,即可啟動top,top的全屏對話模式可分為3部分系統信息欄、命令輸入欄、進程列表欄。

第一部分最上部的系統信息欄,第一行top00:11:04為系統當前時刻,3:35為系統啟動後到現在的運作時間,2users為當前登錄到系統的用戶,更確切的說是登錄到用戶的終端數--同一個用戶同一時間對系統多個終端的連接將被視為多個用戶連接到系統,這里的用戶數也將表現為終端的數目。

loadaverage為當前系統負載的平均值,後面的三個值分別為1分鍾前、5分鍾前、15分鍾前進程的平均數,一般的可以認為這個數值超過CPU數目時,CPU將比較吃力的負載當前系統所包含的進程。

第二行Tasks,59total為當前系統進程總數,1running為當前運行中的進程數,58sleeping為當前處於等待狀態中的進程數,0stoped為被停止的系統進程數,0zombie為被復原的進程數。

第三行Cpus,分別表示了CPU當前的使用率,第四行Mem分別表示了內存總量、當前使用量、空閑內存量、以及緩沖使用中的內存量,第五行Swap表示類別同第四行Mem,但此處反映著交換分區Swap的使用情況,通常,交換分區(Swap)被頻繁使用的情況,將被視作物理內存不足而造成的。

第二部分中間部分的內部命令提示欄top運行中可以通過top的內部命令對進程的顯示方式進行控制,內部命令如下表,s改變畫面更新頻率,l關閉或開啟第一部分第一行top信息的表示,t關閉或開啟第一部分第二行Tasks和第三行Cpus信息的表示,m關閉或開啟第一部分第四行Mem和第五行Swap信息的表示。

N以PID的大小的順序排列表示進程列表第三部分後述,P以CPU佔用率大小的順序排列進程列表第三部分後述,M以內存佔用率大小的順序排列進程列表第三部分後述,h顯示幫助,n設置在進程列表所顯示進程的數量,q退出top,s改變畫面更新周期。

第三部分最下部分的進程列表欄以PID區分的進程列表將根據所設定的畫面更新時間定期的更新,通過top內部命令可以控制此處的顯示方式pmap可以根據進程查看進程相關信息佔用的內存情況,進程號可以通過ps查看如下所示$pmap-d5647。

ps如下例所示$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'其中rsz是是實際內存,$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'|greporacle|sort-nrk,其中rsz為實際內存,上例實現按內存排序,由大到小。

在Linux下查看內存我們一般用free命令[root@tmp]#free,,Mem:,-/+buffers/cache:4711162795064,Swap:2048276801601968116。

下面是對這些數值的解釋total總計物理內存的大小,used已使用多大,free可用有多少,Shared多個進程共享的內存總額,Buffers/cached:磁碟緩存的大小,第三行-/+buffers/cached,used已使用多大,free:可用有多少。

Linux的特點

Linux是一種自由和開放源代碼的類UNIX操作系統,該操作系統的內核由林納斯托瓦茲在1991年10月5日首次發布,在加上用戶空間的應用程序之後,成為Linux操作系統,Linux也是自由軟體和開放源代碼軟體發展中最著名的例子,只要遵循GNU通用公共許可證,任何個人和機構都可以自由地使用Linux的所有底層源代碼,也可以自由地修改和再發布。

大多數Linux系統還包括了像提供GUI界面的X Window之類的程序,除了一部分專家之外,大多數人都是直接使用Linux發布版,而不是自己選擇每一樣組件或自行設置,以後藉助於Internet網路,並通過全世界各地計算機愛好者的共同努力,已成為今天世界上使用最多的一種UNIX 類操作系統,並且使用人數還在迅猛增長。

❸ Linux內存機制(swap)

我們知道,直接從物理內存讀寫數據要比從硬碟讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。

物理內存就是系統硬體提供的內存大小,是真正的內存,相對於物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯內存,用作虛擬內存的磁碟空間被稱為交換空間(Swap Space)。

作為物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存,更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存得到了釋放,這塊內存就可以用於其它目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。

Linux的內存管理採取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

要深入了解linux內存運行機制,需要知道下面提到的幾個方面:

Linux系統會不時的進行頁面交換操作,以保持盡可能多的空閑物理內存,即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。

Linux 進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,linux內核根據」最近最經常使用「演算法,僅僅將一些不經常使用的頁面文件交換到虛擬 內存,有時我們會看到這么一個現象:linux物理內存還有很多,但是交換空間也使用了很多。其實,這並不奇怪,例如,一個佔用很大內存的進程運行時,需 要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但後來這個佔用很多內存資源的進程結束並釋放了很多內存時,剛才被交換出去的頁面 文件並不會自動的交換進物理內存,除非有這個必要,那麼此刻系統物理內存就會空閑很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關於這點,不 用擔心什麼,只要知道是怎麼一回事就可以了。

交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁 面,它們又會被馬上交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖 然可以在一段時間內自行恢復,但是恢復後的系統已經基本不可用了。

因此,合理規劃和設計Linux內存的使用,是非常重要的.

在Linux 操作系統中,當應用程序需要讀取文件中的數據時,操作系統先分配一些內存,將數據從磁碟讀入到這些內存中,然後再將數據分發給應用程序;當需要往文件中寫 數據時,操作系統先分配內存接收用戶數據,然後再將數據從內存寫到磁碟上。然而,如果有大量數據需要從磁碟讀取到內存或者由內存寫入磁碟時,系統的讀寫性 能就變得非常低下,因為無論是從磁碟讀數據,還是寫數據到磁碟,都是一個很消耗時間和資源的過程,在這種情況下,Linux引入了buffers和 cached機制。

buffers與cached都是內存操作,用來保存系統曾經打開過的文件以及文件屬性信息,這樣當操作系統需要讀取某些文件時,會首先在buffers 與cached內存區查找,如果找到,直接讀出傳送給應用程序,如果沒有找到需要數據,才從磁碟讀取,這就是操作系統的緩存機制,通過緩存,大大提高了操 作系統的性能。但buffers與cached緩沖的內容卻是不同的。

buffers是用來緩沖塊設備做的,它只記錄文件系統的元數據(metadata)以及 tracking in-flight pages,而cached是用來給文件做緩沖。更通俗一點說:buffers主要用來存放目錄裡面有什麼內容,文件的屬性以及許可權等等。而cached直接用來記憶我們打開過的文件和程序。

為了驗證我們的結論是否正確,可以通過vi打開一個非常大的文件,看看cached的變化,然後再次vi這個文件,感覺一下兩次打開的速度有何異同,是不是第二次打開的速度明顯快於第一次呢?接著執行下面的命令:

find / -name .conf 看看buffers的值是否變化,然後重復執行find命令,看看兩次顯示速度有何不同。

上面這個60代表物理內存在使用40%的時候才會使用swap(參考網路資料:當剩餘物理內存低於40%(40=100-60)時,開始使用交換空間) swappiness=0的時候表示最大限度使用物理內存,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裡面。

值越大表示越傾向於使用swap。可以設為0,這樣做並不會禁止對swap的使用,只是最大限度地降低了使用swap的可能性。

通常情況下:swap分區設置建議是內存的兩倍 (內存小於等於4G時),如果內存大於4G,swap只要比內存大就行。另外盡量的將swappiness調低,這樣系統的性能會更好。

B. 修改swappiness參數

永久性修改:

立即生效,重啟也可以生效。

一般系統是不會自動釋放內存的 關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:

0 – 不釋放 1 – 釋放頁緩存 2 – 釋放dentries和inodes 3 – 釋放所有緩存

前提:首先要保證內存剩餘要大於等於swap使用量,否則會宕機!根據內存機制,swap分區一旦釋放,所有存放在swap分區的文件都會轉存到物理內存上。通常通過重新掛載swap分區完成釋放swap。
a.查看當前swap分區掛載在哪?b.關停這個分區 c.查看狀態:d.查看swap分區是否關停,最下面一行顯示全 e.將swap掛載到/dev/sda5上 f.查看掛載是否成功

❹ linux 下怎麼查看一個進程佔用內存大小

你好,方法如下:
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
(1)top
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
$ top -u oracle
內容解釋:
PID:進程的ID
USER:進程所有者
PR:進程的優先順序別,越小越優先被執行
NInice:值
VIRT:進程佔用的虛擬內存
RES:進程佔用的物理內存
SHR:進程使用的共享內存
S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
%CPU:進程佔用CPU的使用率
%MEM:進程使用的物理內存和總內存的百分比
TIME+:該進程啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。
COMMAND:進程啟動命令名稱
常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
(2)pmap
可以根據進程查看進程相關信息佔用的內存情況,(進程號可以通過ps查看)如下所示:
$ pmap -d 14596
(3)ps
如下例所示:
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是實際內存
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle | sort -nrk5
其中rsz為實際內存,上例實現按內存排序,由大到小

❺ Linux操作系統中內存buffer和cache的區別

buffer 與cache 的區別
A buffer is something that has yet to be 「written」 to disk. A cache is something that has been 「read」 from the disk and stored for later use
緩沖(buffers)是根據磁碟的讀寫 設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反復尋道,從而提高系統性能。linux有一個守護進程定 期清空緩沖內容(即寫如磁碟),也可以通過sync命令手動清空緩沖。
緩存(cached)是把讀取過的數據 保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。

❻ 命令查看Linux伺服器內存、CPU、顯卡、硬碟使用情況

大致結果類似下圖:

Mem行(單位均為M):

(-/+ buffers/cache)行:

Swap行指交換分區。

實際上不要看free少就覺得內存不足了,buffers和cached都是可以在使用內存時拿來用的,應該以(-/+ buffers/cache)行的free和used來看。只要沒發現swap的使用,就不用太擔心,如果swap用了很多,那就要考慮增加物理內存了。

大致結果類似下圖:

上方文字部分的紅框為總的CPU佔用百分率,下方的表格是每個進程的CPU佔用率,在表格第一行可以看到紅框中佔用率超過了150%,這是因為伺服器是多核CPU,而該進程使用了多核。

大致結果類似下圖:

表格中會顯示顯卡的一些信息,第一行是版本信息,第二行是標題欄,第三行就是具體的顯卡信息了,如果有多個顯卡,會有多行,每一行的信息值對應標題欄對應位置的信息。

需要注意的一點是顯存佔用率和GPU佔用率是兩個不一樣的東西,類似於內存和CPU,兩個指標的佔用率不一定是互相對應的。

在下面就是每個進程使用的GPU情況了。

大致結果如下圖:

表格中每一行代表一個文件系統,各列意義如下:

要查看具體某個文件或者文件夾的大小的話,可以使用下面的命令:

命令可以查看文件或文件夾的磁碟使用空間,而-h參數的意思是使用GB、MB等易讀的格式。如果不帶--max-depth參數,那麼將循環列出文件夾下所有文件和文件夾佔用的空間,帶此參數,則是指定深入目錄的層數。

如果要看文件夾下所有文件的大小,可以使用*:

查看作者首頁

閱讀全文

與linuxbufferscached相關的資料

熱點內容
微信視頻不能轉發朋友圈 瀏覽:596
影視後期的app有哪些 瀏覽:956
電子保單數據出錯什麼意思 瀏覽:368
如何以文件下載音樂 瀏覽:438
計算機網路章節練習 瀏覽:999
單片機的外部中斷程序 瀏覽:48
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905
imgtool工具中文版 瀏覽:539
java幫助文件在哪裡 瀏覽:965
win10切換輸入語言 瀏覽:696
haier電視網路用不了怎麼辦 瀏覽:361
蘋果6手機id怎麼更改 瀏覽:179
米家掃地機器人下載什麼app 瀏覽:82
如何在編程貓代碼島20種樹 瀏覽:915
手機基礎信息存儲在哪個文件 瀏覽:726
如何查找手機備份文件 瀏覽:792
內存清理工具formac 瀏覽:323
iphone過濾騷擾電話 瀏覽:981

友情鏈接