日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux cached过高问题

發布時間:2024/9/20 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux cached过高问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux手動釋放緩存的方法

Linux釋放內存的命令:
sync
echo 1 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統默認值)
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存

釋放完內存后改回去讓系統重新自動分配內存。
echo 0 >/proc/sys/vm/drop_caches

free -m #看內存是否已經釋放掉了。

如果我們需要釋放所有緩存,就輸入下面的命令:
echo 3 > /proc/sys/vm/drop_caches

######### Linux釋放內存的相關知識 ###############

在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存占用掉,導致系統使用SWAP空 間影響性能,例如當你在linux下頻繁存取文件后,物理內存會很快被用光,當程序結束后,內存不會被正常釋放,而是一直作為caching。,此時就需 要執行釋放內存(清理緩存)的操作了。

Linux系統的緩存機制是相當先進的,他會針對dentry(用于VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁盤塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之后,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分 緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉嗎?所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是 釋放緩存的操作了。/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改 /proc中的文件,來對當前kernel的行為做出調整.那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。要達到釋 放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就 是不釋放緩存。

一般復制了文件后,可用內存會變少,都被cached占用了,這是linux為了提高文件讀取效率的做法:為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。"

釋放內存前先使用sync命令做同步,以確保文件系統的完整性,將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。

[root@fcbu.com ~]# free -m
???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:????????? 7979?????? 7897???????? 82????????? 0???????? 30?????? 3918
-/ buffers/cache:?????? 3948?????? 4031
Swap:???????? 4996??????? 438?????? 4558

第一行用全局角度描述系統使用的內存狀況:
total 內存總數
used 已經使用的內存數,一般情況這個值會比較大,因為這個值包括了cache 應用程序使用的內存
free 空閑的內存數
shared 多個進程共享的內存總額
buffers 緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加)
cached 緩存,用于已打開的文件

第二行描述應用程序的內存使用:
-buffers/cache 的內存數:used - buffers - cached
buffers/cache 的內存數:free buffers cached
前個值表示-buffers/cache 應用程序使用的內存大小,used減去緩存值
后個值表示 buffers/cache 所有可供應用程序使用的內存大小,free加上緩存值

第三行表示swap的使用:
used 已使用
free 未使用?

可用的內存=free memory buffers cached。

為什么free這么小,是否關閉應用后內存沒有釋放?
但實際上,我們都知道這是因為Linux對內存的管理與Windows不同,free小并不是說內存不夠用了,應該看的是free的第二行最后一個值:-/ buffers/cache:?????? 3948???????4031?,這才是系統可用的內存大小。

實際項目中的經驗告訴我們,如果因為是應用有像內存泄露、溢出的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難查看。我覺得既然核心是可以快速清空buffer或cache,但核心并沒有這樣做(默認值是0),我們不應該隨便去改變它。

一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生內存不足、應用獲取不到可用內存、OOM錯 誤等問題時,還是更應該去分析應用方面的原因,如用戶量太大導致內存不足、發生應用內存溢出等情況,否則,清空buffer,強制騰出free的大小,可 能只是把問題給暫時屏蔽了,所以說一般情況下linux都不用經常手動釋放內存。

?

?

1、cached主要負責緩存文件使用,?日志文件過大造成cached區內存增大把內存占用完?.

Free中的buffer和cache:(它們都是占用內存):
buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區
cache: 作為page cache的內存, 文件系統的cache
如果 cache 的值很大,說明cache住的文件數很多。

Linux 內存管理做了很多精心的設計,除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換),還采取了兩種主要Cache方式:Buffer Cache和Page Cache,目的就是為了提升磁盤IO的性能。從低速的塊設備上讀取數據會暫時保存在內存中,即使數據在當時已經不再需要了,但在應用程序下一次訪問該數據時,它可以從內存中直接讀取,從而繞開低速的塊設備,從而提高系統的整體性能。而Linux會充分利用這些空閑的內存,設計思想是內存空閑還不如拿來多緩存一些數據,等下次程序再次訪問這些數據速度就快了,而如果程序要使用內存而系統中內存又不足時,這時不是使用交換分區,而是快速回收部分緩存,將它們留給用戶程序使用。

因此,可以看出,buffers/cached真是百益而無一害,真正的壞處可能讓用戶產生一種錯覺——Linux耗內存!其實不然,Linux并沒有吃掉你的內存,只要還未使用到交換分區,你的內存所剩無幾時,你應該感到慶幸,因為Linux 緩存了大量的數據,也許下一次你就從中受益!

2、手動釋放cached

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 and inodes: ?echo 3 > /proc/sys/vm/drop_caches

?

?

?

當你在Linux下頻繁存取文件后,物理內存會很快被用光,當程序結束后,內存不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什么很好解決的辦法.那么我來談談這個問題.?

先來說說free命令?

[root@server ~]# free -m??
total used free shared buffers cached??
Mem: 249 163 86 0 10 94??
-/+ buffers/cache: 58 191??
Swap: 511 0 511?

其中:?

total 內存總數?

used 已經使用的內存數?

free 空閑的內存數?

shared 多個進程共享的內存總額?

buffers Buffer Cache和cached Page Cache 磁盤緩存的大小?

-buffers/cache 的內存數:used - buffers - cached?

+buffers/cache 的內存數:free + buffers + cached?

可用的memory=free memory+buffers+cached?

有了這個基礎后,可以得知,我現在used為163MB,free為86,buffer和cached分別為10,94?

那么我們來看看,如果我執行復制文件,內存會發生什么變化.?

[root@server ~]# cp -r /etc ~/test/??
[root@server ~]# free -m??
total used free shared buffers cached??
Mem: 249 244 4 0 8 174??
-/+ buffers/cache: 62 187??
Swap: 511 0 511?

在命令執行結束后,used為244MB,free為4MB,buffers為8MB,cached為174MB,天吶都被cached吃掉了.別緊張,這是為了提高文件讀取效率的做法.?

引用http://www.wujianrong.com/archives/2007/09/linux_free.html“為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。”?

那么有人說過段時間,linux會自動釋放掉所用的內存,我們使用free再來試試,看看是否有釋放>??

[root@server test]# free -m??
total used free shared buffers cached??
Mem: 249 244 5 0 8 174??
-/+ buffers/cache: 61 188??
Swap: 511 0 511?

MS沒有任何變化,那么我能否手動釋放掉這些內存呢?回答是可以的!?

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

[root@server test]# cat /proc/sys/vm/drop_caches??
0??
首先,/proc/sys/vm/drop_caches的值,默認為0?

[root@server test]# sync?

手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行 sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)?

  • [root@server test]# echo 3 > /proc/sys/vm/drop_caches

  • [root@server test]# cat /proc/sys/vm/drop_caches

  • 3

    • 1
    • 2
    • 3

    將/proc/sys/vm/drop_caches值設為3?

  • [root@server test]# free -m

  • total used free shared buffers cached

  • Mem: 249 66 182 0 0 11

  • -/+ buffers/cache: 55 194

  • Swap: 511 0 511

    • 1
    • 2
    • 3
    • 4
    • 5

    再來運行free命令,發現現在的used為66MB,free為182MB,buffers為0MB,cached為11MB.那么有效的釋放了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

  • 來源:https://blog.csdn.net/hellojoy/article/details/80760010

    總結

    以上是生活随笔為你收集整理的Linux cached过高问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。