服务器缓存过多导致系统数据紊乱,Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决...

问题描述

Linux服务器内存使用量超过阈值,触发报警。

问题排查

首先,通过free命令观察系统的内存使用情况,显示如下:

total used freeshared buffers cached

Mem:24675796 24587144 88652 0 357012 1612488

-/+ buffers/cache: 22617644 2058152Swap:2096472 108224 1988248

其中,可以看出内存总量为24675796KB,已使用22617644KB,只剩余2058152KB。

然后,接着通过top命令,shift +

M按内存排序后,观察系统中使用内存最大的进程情况,发现只占用了18GB内存,其他进程均很小,可忽略。

因此,还有将近4GB内存(22617644KB-18GB,约4GB)用到什么地方了呢?

进一步,通过cat /proc/meminfo发现,其中有将近4GB(3688732KB)的Slab内存:

......

Mapped:25212kB

Slab:3688732kB

PageTables:43524kB

......

Slab是用于存放内核数据结构缓存,再通过slabtop命令查看这部分内存的使用情况:

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME13926348 13926348 100% 0.21K 773686 183494744K dentry_cache334040 262056 78% 0.09K 8351 4033404K buffer_head151040 150537 99% 0.74K 30208 5 120832K ext3_inode_cache

发现其中大部分(大约3.5GB)都是用于了dentry_cache。

问题解决

1.

修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档):

a4c26d1e5885305701be709a3d33442f.png

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

Tofreepagecache:* echo 1 > /proc/sys/vm/drop_caches

Tofreedentries and inodes:* echo 2 > /proc/sys/vm/drop_caches

Tofreepagecache, dentries and inodes:* echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to makesure allcached objects are freed.

This tunable was addedin 2.6.16.

a4c26d1e5885305701be709a3d33442f.png

2. 方法1需要用户具有root权限,如果不是root,但有sudo权限,可以通过sysctl命令进行设置:

$sync$sudo sysctl -w vm.drop_caches=3$sudo sysctl -w vm.drop_caches=0 #recovery drop_caches

操作后可以通过sudo sysctl -a | grep drop_caches查看是否生效。

3. 修改/proc/sys/vm/vfs_cache_pressure,调整清理inode/dentry

caches的优先级(默认为100),LinuxInsight中有相关的解释:

At the default value of vfs_cache_pressure = 100 the kernel

will attempt to reclaim dentries and inodes at a “fair” rate with

respect to pagecache and swapcache reclaim. Decreasing

vfs_cache_pressure causes the kernel to prefer to retain dentry and

inode caches. Increasing vfs_cache_pressure beyond 100 causes the

kernel to prefer to reclaim dentries and inodes.

具体的设置方法,可以参考方法1或者方法2均可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值