linux文件緩存
Linux系統是沒有清緩存這個說法的,一般做完系統設置級別變更都有相應的命令使設置生效:例如:sysctl -p; source .bash_profile等。
在Linux下有部分應用軟體有緩存概念,例如:tomcat,再代碼重新發布後需要到tamcat路徑下work路徑中刪除對應文件。
2. linux強制退出緩存文件在哪
緩存文件是因為你vi的時候,沒有保存退出,你在那個目錄下,ls
-a,看到有一個.**.swp的文件,你刪掉那個就可以了
3. linux 清除緩存 釋放內存
這里的默認顯示單位是kb,我的伺服器是128G內存,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(我是說比例越少)。一般情況下,對此命令輸出的理解可以分這幾個層次:
1.不了解。這樣的人的第一反應是:天啊,內存用了好多,70個多G,可是我幾乎沒有運行什麼大程序啊?為什麼會這樣?Linux好占內存!
2.自以為很了解。這樣的人一般評估過會說:嗯,根據我專業的眼光看的出來,內存才用了17G左右,還有很多剩餘內存可用。buffers/cache佔用的較多,說明系統中有進程曾經讀寫過文件,但是不要緊,這部分內存是當空閑來用的。
3.真的很了解。這種人的反應反而讓人感覺最不懂Linux,他們的反應是:free顯示的是這樣,好吧我知道了。神馬?你問我這些內存夠不夠,我當然不知道啦!我特么怎麼知道你程序怎麼寫的?
根據目前網路上技術文檔的內容,我相信絕大多數了解一點Linux的人應該處在第二種層次。大家普遍認為,buffers和cached所佔用的內存空間是可以在內存壓力較大的時候被釋放當做空閑空間用的。但真的是這樣么?在論證這個題目之前,我們先簡要介紹一下buffers和cached是什麼意思:
什麼是buffer/cache?
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?
Page cache主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作為可以映射文件到內存的系統調用:mmap是不是很自然的也應該用到page cache?在當前的系統實現里,page cache也被作為其它文件類型的緩存設備來用,所以事實上page cache也負責了大部分的塊設備文件的緩存工作。
什麼是buffer cache?
Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。一般情況下兩個緩存系統是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,並記錄是哪一個緩沖區被修改了。這樣,內核在後續執行臟數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。
如何回收cache?
Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那麼在內存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。
4. linux如何把內存做成硬碟緩存
開啟swap就可以了,其他的可能要專門程序。
swap就是緩存了,內存大用內存,內存不大用的硬碟空間,雖然還不是你要的那樣,可是內存大了開swap也可以
其實linux文件打開了不是實時寫的,退出要做sync,不然可能就是不在硬碟
5. linux怎麼繞開文件系統緩存
無法繞開的。
文件系統緩存是內核自動控制的。
其他的方法沒有試過了,你可以自己網路看看
6. linux硬碟緩存大小應該怎麼查看
Linux中要查看硬碟緩存大小,可以使用hdparm命令。
1、在終端中執行如下命令。
sudohdparm-I/dev/sdb
2、執行效果如下圖所示,其中cache/buffer
size行即為緩存大小。
說明:-I:直接讀取硬碟所提供的硬體規格信息,/dev/sdb指的電腦中的第二塊硬碟。
3、hdparm常用參數及說明如下:
-a<快取分區>:設定讀取文件時,預先存入塊區的分區數,若不加上<快取分區>選項,則顯示目前的設定;
-A<0或1>:啟動或關閉讀取文件時的快取功能;
-c<I/O模式>:設定IDE32位I/O模式;
-C:檢測IDE硬碟的電源管理模式;
-d<0或1>:設定磁碟的DMA模式;
-f:將內存緩沖區的數據寫入硬碟,並清楚緩沖區;
-g:顯示硬碟的磁軌,磁頭,磁區等參數;
-h:顯示幫助;
-i:顯示硬碟的硬體規格信息,這些信息是在開機時由硬碟本身所提供;
-I:直接讀取硬碟所提供的硬體規格信息;
-k<0或1>:重設硬碟時,保留-dmu參數的設定;
-K<0或1>:重設硬碟時,保留-APSWXZ參數的設定;
-m<磁區數>:設定硬碟多重分區存取的分區數;
-n<0或1>:忽略硬碟寫入時所發生的錯誤;
-p<PIO模式>:設定硬碟的PIO模式;
-P<磁區數>:設定硬碟內部快取的分區數;
-q:在執行後續的參數時,不在屏幕上顯示任何信息;
-r<0或1>:設定硬碟的讀寫模式;
-S<時間>:設定硬碟進入省電模式前的等待時間;
-t;評估硬碟的讀取效率;
-T:平谷硬碟快取的讀取效率;
-u<0或1>:在硬碟存取時,允許其他中斷要求同時執行;
-v:顯示硬碟的相關設定;
-w<0或1>:設定硬碟的寫入快取;
-X<傳輸模式>:設定硬碟的傳輸模式;
-y:使IDE硬碟進入省電模式;
-Y:使IDE硬碟進入睡眠模式;
-Z:關閉某些Seagate硬碟的自動省電功能。
7. 如何為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
8. linux系統有沒有參數控制文件系統緩存
當然有。linux磁碟參數調優,要以集群目的為依據,如果強調安全,那麼要適當降低寫緩沖。如果強調寫速度,那麼要加大寫緩沖。
9. 如何在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