`
san_yun
  • 浏览: 2583245 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决

 
阅读更多

作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息

网址: http://www.cnblogs.com/panfeng412/archive/2013/12/10/drop-caches-under-linux-system.html

问题描述

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

问题排查

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

             total       used       free     shared    buffers     cached
Mem:      24675796   24587144      88652          0     357012    1612488
-/+ buffers/cache:   22617644    2058152
Swap:      2096472     108224    1988248

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

然后,接着通过top命令,shift + M按内存排序后,观察系统中使用内存最大的进程情况,发现只占用了18GB内存,其他进程均很小,可忽略。

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

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

......
Mapped:          25212 kB
Slab:          3688732 kB
PageTables:      43524 kB
......

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

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
13926348 13926348 100%    0.21K 773686       18   3494744K dentry_cache
334040 262056  78%    0.09K   8351       40     33404K buffer_head
151040 150537  99%    0.74K  30208        5    120832K ext3_inode_cache

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

问题解决

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

复制代码
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
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
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.
复制代码

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均可。

参考资料

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

http://major.io/2008/12/03/reducing-inode-and-dentry-caches-to-keep-oom-killer-at-bay/

http://linux-mm.org/Drop_Caches

分享到:
评论

相关推荐

    解决 linux 下 buffcache 占用过高的问题.docx

    解决 linux下 buff/cache 占用过高的问题解决 linux下 buff/cache 占用过高的问题

    Linux内存buffer和cache的区别

    在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得...

    释放指定文件占用cache的方法

    通过代码实现释放linux 系统特定文件占用的cache内存的方法

    Linux pagecache与内存占用

     linux系统中通常使用free命令来查看内存使用情况,free命令主要是从/proc/meminfo文件中读取的内存数据然后进行简单处理进行展示,根据查看free命令的手册了解到各个字段的含义。  total:系统总内存大小...

    Linux内核内存Cache机制原理

    Linux内核内存Cache机制原理从源码的角度来分析流程,可以帮助Linux内核学习者了结Cache的内存机制!

    Linux内存中Swap和Buffer Cache机制

    Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要非常清 楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成。本文将为大家介绍Linux内存中Swap和Buffer ...

    Linux操作系统中内存buffer和cache的区别.pdf

    Linux操作系统中内存buffer和cache的区别.pdf

    Cache Server V1.2.0 嵌入式(实时)内存数据库(linux 32)

    Cache Server嵌入式内存数据库是业内运行速度最快,功能强大的嵌入式(实时)内存数据库系统。产品定位于内存数据库系统和提供高端高性能系统的开发、处理平台。 Cache Server内存数据库是将所有数据加载到物理内存...

    linux内存中buffer与cache的区别

    我们通过free命令查看机器空闲内存时,会发现free的值很...这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

    linux 查看 cache 中文件

    安装此工具后,可以查看系统内存中 cache 包含的文件。 在编译安装此工具之前需要安装GCC包

    linux 内核 cache 管理介绍

    关于linux的cache管理的介绍

    Linux系统内核文件Cache管理机制

    自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与 Windows、UNIX 一起占据了操作系统领域几乎所有的市场份额。特别是在高性能计算领域,Linux 已经成为一个占...

    Linux操作系统中内存buffer和cache的区别.docx

    Linux操作系统中内存buffer和cache的区别.docx

    linux下释放cache内存

    当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题

    linux内存中cache分析

    去掉^M的版本 博文链接:https://phl.iteye.com/blog/2242033

    介绍linux cache机制

    介绍linux的cache机制,包含一些代码,需要了解的,自取

    Linux操作系统的内存使用机制研究

    Linux支持虚拟内存(Virtual Mmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运 行的那样...

    Linux服务器集群系统

    本文主要介绍了LVS集群的体系结构。先给出LVS集群的通用体系结构,并讨论了其的设计原则和相应的特点;最后将LVS集群应用于建立可伸缩的Web、Media、Cache和Mail等网络服务。

    linux内存计算脚本1.3.2(cm1.3.2.sh)

    通过linux脚本计算系统的各项内存占用总数,包括: RSS、PSS、PageTable、SlabInfo、HugePage、Cache。 可用于快速了解linux系统的内存占用情况,快速判定内存泄漏点. 运行方法:sh cm1.3.2.sh

    Linux Kernel Cache.doc

    Linux Kernel Cache.doc 介绍

Global site tag (gtag.js) - Google Analytics