linux cache buffer区别,Linux buffer/cache异同
buffers與cached
1)、異同點
在Linux 操作系統中,當應用程序需要讀取文件中的數據時,操作系統先分配一些內存,將數據從磁盤讀入到這些內存中,然后再將數據分發給應用程序;當需要往文件中寫 數據時,操作系統先分配內存接收用戶數據,然后再將數據從內存寫到磁盤上。然而,如果有大量數據需要從磁盤讀取到內存或者由內存寫入磁盤時,系統的讀寫性 能就變得非常低下,因為無論是從磁盤讀數據,還是寫數據到磁盤,都是一個很消耗時間和資源的過程,在這種情況下,Linux引入了buffers和 cached機制。
buffers與cached都是內存操作,用來保存系統曾經打開過的文件以及文件屬性信息,這樣當操作系統需要讀取某些文件時,會首先在buffers 與cached內存區查找,如果找到,直接讀出傳送給應用程序,如果沒有找到需要數據,才從磁盤讀取,這就是操作系統的緩存機制,通過緩存,大大提高了操 作系統的性能。但buffers與cached緩沖的內容卻是不同的。
buffers是用來緩沖塊設備做的,它只記錄文件系統的元數據(metadata)以及 tracking in-flight pages,而cached是用來給文件做緩沖。更通俗一點說:buffers主要用來存放目錄里面有什么內容,文件的屬性以及權限等等。而cached直接用來記憶我們打開過的文件和程序。
#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------緩存釋放后,內存使用情況(KB):----------------------" free cached1=`free |grep Mem:|awk ‘{print $7}‘` buffers1=`free |grep Mem:|awk ‘{print $6}‘` date1=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date2=`date +"%Y%m%d%H%M%S"` echo -e "----------------------首次讀取大文件后,內存使用情況(KB):----------------------" free cached2=`free |grep Mem:|awk ‘{print $7}‘` buffers2=`free |grep Mem:|awk ‘{print $6}‘` #echo $date1 #echo $date2 interval_1=`expr ${date2} - ${date1}` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +"%Y%m%d%H%M%S"` cat catalina.logaa >1 date4=`date +"%Y%m%d%H%M%S"` echo -e "----------------------再次讀取大文件后,內存使用情況(KB):----------------------" free cached3=`free |grep Mem:|awk ‘{print $7}‘` buffers3=`free |grep Mem:|awk ‘{print $6}‘` #echo $date3 #echo $date4 interval_2=`expr ${date4} - ${date3}` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------統計匯總數據如下:----------------------" echo -e "首次讀取大文件,cached增量:${cached_increment1},單位:KB" echo -e "首次讀取大文件,buffers增量:${buffers_increment1},單位:KB" echo -e "首次讀取大文件,耗時:${interval_1},單位:s \n" echo -e "再次讀取大文件,cached增量:${cached_increment2},單位:KB" echo -e "再次讀取大文件,buffers增量:${buffers_increment2},單位:KB" echo -e "再次讀取大文件,耗時:${interval_2},單位:s"
執行結果如下(由于打印出來的free結果跟參數賦值時用的free命令之間有時間間隔,計算起來可能會略有不同):
#!/bin/bash sync sync echo 3 > /proc/sys/vm/drop_caches echo -e "----------------------緩存釋放后,內存使用情況(KB):----------------------" free cached1=`free |grep Mem:|awk ‘{print $7}‘` buffers1=`free |grep Mem:|awk ‘{print $6}‘` date1=`date +%s.%N` find /* -name *.conf >2 date2=`date +%s.%N` echo -e "----------------------首次查詢后,內存使用情況(KB):----------------------" free cached2=`free |grep Mem:|awk ‘{print $7}‘` buffers2=`free |grep Mem:|awk ‘{print $6}‘` #echo $date1 #echo $date2 interval_1=`echo "scale=3; ${date2} - ${date1}" | bc` cached_increment1=`expr ${cached2} - ${cached1}` buffers_increment1=`expr ${buffers2} - ${buffers1}` date3=`date +%s.%N` find /* -name *.conf >2 date4=`date +%s.%N` echo -e "----------------------再次查詢后,內存使用情況(KB):----------------------" free cached3=`free |grep Mem:|awk ‘{print $7}‘` buffers3=`free |grep Mem:|awk ‘{print $6}‘` #echo $date3 #echo $date4 interval_2=`echo "scale=3; ${date4} - ${date3}" | bc` cached_increment2=`expr ${cached3} - ${cached2}` buffers_increment2=`expr ${buffers3} - ${buffers2}` echo -e "----------------------統計匯總數據如下:----------------------" echo -e "首次查詢,cached增量:${cached_increment1},單位:KB" echo -e "首次查詢,buffers增量:${buffers_increment1},單位:KB" echo -e "首次查詢,耗時:${interval_1},單位:s \n" echo -e "再次查詢,cached增量:${cached_increment2},單位:KB" echo -e "再次查詢,buffers增量:${buffers_increment2},單位:KB" echo -e "再次查詢,耗時:${interval_2},單位:s"
結果如下(最后那個應該是0.470702440,使用bc計算的時候那個0被去掉了):
2、內存釋放
Writing to this will cause thekernel to drop clean caches, dentries and inodes from memory, causing thatmemory to become free. 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 andinodes: echo 3 > /proc/sys/vm/drop_caches As this is a non-destructiveoperation and dirty objects are not freeable, the user should run `sync‘ first. http://www.kernel.org/doc/Documentation/sysctl/vm.txt
# cat /proc/sys/vm/drop_caches
0
默認是0,1表示清空頁緩存,2表示清空inode和目錄樹緩存,3清空所有的緩存
[root@hps103 ~]# sync [root@hps103 ~]# free -m total used free shared buffers cached Mem: 499 323 175 0 52 188 -/+ buffers/cache: 82 416 Swap: 2047 0 2047 [root@hps103 ~]# echo 3 > /proc/sys/vm/drop_caches [root@hps103 ~]# free -m //發現緩存明顯減少了 total used free shared buffers cached Mem: 499 83 415 0 1 17 -/+ buffers/cache: 64 434 Swap: 2047 0 2047
原文:https://www.cnblogs.com/AmilyWilly/p/9285048.html
總結
以上是生活随笔為你收集整理的linux cache buffer区别,Linux buffer/cache异同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java接收uniapp上传的图片_un
- 下一篇: php 判断不是文件类型,php 判断文