free / buffer與cache

       前幾天看到有些伙伴傻傻分不清楚buffer與cache的用處,后來發現我也不能很清楚的說出來buffer與cache在不同的地方有什么不同之處,這里就總結了一些關于buffer于cache的區別,如有不完善的地方,請大家指出來。free / buffer與cache

       說到buffer與cache,那就不得不來說說free命令了,先來看一下free命令的執行結果:

       free / buffer與cache

         當我執行了復制的命令后,我們再來看一看內存的變化情況:

       free / buffer與cache

       free / buffer與cache

       執行結束后cached暴增到了218,這是為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。”

       有些人說過一段時間,系統就會自動釋放這一部分cached,可是結果并不是這樣的, 在過了一段時間之后,cached依然居高不下,在收集了一些大牛的資料之后,我總結了一些小技巧:

       我們可以通過手動來清除緩存,在/下有個proc的文件,/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整.那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存.操作如下:

       free / buffer與cache
       /proc/sys/vm/drop_caches的值,默認為0
       free / buffer與cache
      手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行 sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
       free / buffer與cache
      將/proc/sys/vm/drop_caches值設為3
      free / buffer與cache
      再來運行free命令,發現現在的cached變成 49M了。

      看來這個手動清除的方法還是很有效的free / buffer與cache

     有關/proc/sys/vm/drop_caches的用法在下面進行了說明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
              Writing  to  this  file  causes the kernel to drop clean caches,
              dentries and inodes from memory, causing that memory  to  become free.
              To free  pagecache,  use  echo 1 > /proc/sys/vm/drop_caches;

              To free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
              To free   pagecache,   dentries  and  inodes,  use  echo  3  >
                  /proc/sys/vm/drop_caches.
              Because this is a non-destructive operation  and  dirty  objects
              are not freeable, the user should run sync(8) first.

     查了一些英文資料,對于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.


      cache 和 buffer的區別:
                Cache:高速緩存,是位于CPU與主內存間的一種容量較小但速度很高的存儲器。由于CPU的速度遠高于主內存,CPU直接從內存中存取數據要等待一定時間周期,Cache中保存著CPU剛用過或循環使用的一部分數據,當CPU再次使用該部分數據時可從Cache中直接調用,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache集成在CPU內部,L2 Cache早期一般是焊在主板上,現在也都集成在CPU內部,常見的容量有256KB或512KB L2 Cache。
                Buffer:緩沖區,一個用于存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。通過緩沖區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的                            設備的操作進程不發生間斷。

      Free中的buffer和cache:(它們都是占用內存):
                buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區
                cache: 作為page cache的內存, 文件系統的cache
      如果 cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀I/O 比會非常小。
     

原創文章,作者:jk,如若轉載,請注明出處:http://www.www58058.com/81653

(2)
jkjk
上一篇 2017-07-17
下一篇 2017-07-17

相關推薦

  • 人志建,則無敵—磁盤、LVM2和簡單腳本練習

    馬哥網絡班21期-第七周博客 1、創建一個10G分區,并格式為ext4文件系統;  disk /dev/sdb         Command (m for help): n    &nbs…

    Linux干貨 2016-08-19
  • 第一天心得體會

    初次見面,你好

    2018-03-26
  • DNS中view的實現

    [root@localhost /var/named]# ll total 32 -rw-r–r–. 1 root ?root ??173 Jan 20 14:46 magedu.com.zone -rw-r–r–. 1 root ?root ??173 Jan 20 14:46 magedu.com.zone…

    2018-01-22
  • DNS實驗

    本實驗需的注意問題:      1、運營商的服務器需要更改根指向服務器地址      2、根服務器上的配置文件/etc/named.conf需要將"."根區域禁用;      3、更改區域數據庫文件的屬組為named;c…

    Linux干貨 2016-12-12
  • LVM創建實例及相關注釋

    LVM創建    pv—>vg—->lv—->快照 創建前準備了四塊1g硬盤分別為:sdb  sdc sdd  sde,并分別給四塊盤劃分了1G的空間,并指定了分區系統類型為8e(即Linux LVM) [root@localhost ~]# fdisk /dev/…

    Linux干貨 2015-06-08
  • haproxy實戰之haproxy實現mysql負載均衡

    haproxy實戰之haproxy實現mysql負載均衡 實驗目的haproxy + mysql實現負載均衡 1.準備機器,做好時間同步,域名主機名解析 192.168.42.151 [node2 haproxy] 192.168.42.152 [node3 mariadb] 192.168.42.153 [node4 mariadb] 2.node3,no…

    Linux干貨 2017-06-29

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-07-27 00:19

    有意思的總結,可見是真正遇到了這個問題,也真正思考了,贊~~繼續加油~

欧美性久久久久