天天看點

記一次解決緩存不釋放導緻記憶體耗光問題

1 前言

通過腳本備份資料和系統,筆者遇到兩項緩存過高不釋放而導緻記憶體使用過高問題,Zabbix截圖如下,

<a href="https://s1.51cto.com/wyfs02/M01/05/CE/wKiom1msyt7CyOP-AAChUchOJ2s359.png" target="_blank"></a>

- 第一次是由每小時往挂載的Window共享裡面存放備份檔案引起

- 第二次是由每周備份系統過度地頻繁讀寫檔案系統引起緩存不釋放引起

2 挂載Window共享備份引發的緩存問題

2.1 問題描述

挂載Window的共享成為Linux伺服器的備份目錄,發現備份後緩存過高,挂載範例如下,

1

<code>mount</code> <code>-t cifs -o username=user1%pwd1 </code><code>//backupSer/backup</code><code>$ </code><code>/backup/</code>

2.2 排查方法

1)使用free指令可以發現cached占用情況,

<code>free</code> <code>-m</code>

顯示如下:

2

3

4

<code>             </code><code>total       used       </code><code>free</code>     <code>shared    buffers     cached</code>

<code>Mem:          7872       7732        139          0        190       6312</code>

<code>-/+ buffers</code><code>/cache</code><code>:       1229       6642</code>

<code>Swap:         4047          0       4047</code>

注:留意cached項非常高

2)進一步的,使用slabtop可以發現cifs子產品占用了大量的緩存(忘記截圖保留了……O(∩_∩)O哈哈~,見諒哈!)

<code>slabtop</code>

注:檢視SIZE和NAME項

2.3 排查故障

嘗試手動解除安裝發現緩存被釋放

<code>umount</code> <code>/backup</code>

2.4 解決方案

改用autofs去按需要自動挂載和解除安裝(非本文核心内容,這裡不詳述,自己研究)

3 頻繁讀寫檔案系統引發的Cache問題

3.1 問題描述

用tar指令備份系統,由于頻繁讀寫檔案系統,實體記憶體占用不被釋放

3.2 排查方法

1)檢視緩存占用情況

2)進一步的,使用slabtop沒有發現占用了大量緩存的子產品

3.3 補充知識

free -m列印的結果,

如上所示,

cached項反映的是pagecache的使用情況

buffers項反映的是inode和dentry等檔案系統metadata的使用情況

網絡上有3種釋放方法:

5

6

7

8

<code>#釋放pagecache</code>

<code>echo</code> <code>1 &gt; </code><code>/proc/sys/vm/drop_caches</code>  

<code>#釋放inode和dentry等metadata  </code>

<code>echo</code> <code>2 &gt; </code><code>/proc/sys/vm/drop_caches</code>  

<code>#釋放pagecache和inode/dentry</code>

<code>echo</code> <code>3 &gt; </code><code>/proc/sys/vm/drop_caches</code>

3.4 解決方案

<code>sync</code>

<code>echo</code> <code>1 &gt; </code><code>/proc/sys/vm/drop_caches</code>

注:建議不要釋放inode和dentry,筆者在CentOS 6.8中嘗試使用過,會導緻虛拟機當機(當然,這有可能是個特例)

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1962465,如需轉載請自行聯系原作者

繼續閱讀