1. 程式人生 > >CMSDB內存告警

CMSDB內存告警

內存告警

一、問題描述

2017年國慶假期期間收到cmsdb內存告警,說內存使用率已經超過85%

二、問題分析

1、登錄cmsdb服務器,查看哪些進程使用內存最多,發現內存使用最多也就才48M,如下圖

技術分享

2、那大量的內存哪裏去了,又通過free –m查看具體的內存使用,發現剩余只有

164M,而cached則使用了18607M

技術分享

3、為什麽cached使用這麽多內存,通過cat/proc/meminfo查看詳細的內存使用情況,發現Inactive(file)占用大量的內存,即不活動的內存,linux系統內存回收就是從此地方回收內存,

Inactive(file)很大,說明系統回收的時候,可以一下子回收很多內存

技術分享

註:LRU listLinux kernel的內存頁面回收算法(PageFrame Reclaiming Algorithm)所使用的數據結構,LRULeast Recently Used的縮寫詞

,這個算法的核心思想是:回收的頁面應該是最近使用得最少的,為了實現這個目標,最理想的情況是每個頁面都有一個年齡項,用於記錄最近一次訪問頁面的時間,可惜x86 CPU硬件並不支持這個特性,x86 CPU只能做到在訪問頁面時設置一個標誌位Access Bit,無法記錄時間,所以Linux Kernel使用了一個折衷的方法——它采用了LRU list列表,把剛訪問過的頁面放在列首,越接近列尾的就是越長時間未訪問過的頁面,這樣,雖然不能記錄訪問時間,但利用頁面在LRU list中的相對位置也可以輕松找到年齡最長的頁面。Linux kernel設計了兩種LRU list: active list inactivelist, 剛訪問過的頁面放進active list,長時間未訪問過的頁面放進inactive list,這樣從inactive list回收頁面就變得簡單了。內核線程kswapd會周期性地把active list中符合條件的頁面移到inactive list中,這項轉移工作是由refill_inactive_zone()完成的。

三、解決步驟

清系統緩存:

#echo 1 >/proc/sys/vm/drop_caches 清理頁緩存

#echo 2 >/proc/sys/vm/drop_caches 清理文件緩存

#echo 3 >/proc/sys/vm/drop_caches 清理也緩存和文件緩存

四、總結與建議

1、切記,操作上面步驟時,一定要通過sync將內存中數據同步到磁盤中,否則有可能丟失數據


本文出自 “會飛的魚” 博客,請務必保留此出處http://wstonge.blog.51cto.com/1598339/1971966

CMSDB內存告警