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

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占用过高",这是一个常见的系统性能优化问题,尤其是对于运行Java应用或者其他资源密集型服务的云服务器而言。这里我们将深入探讨buff/cache的作用、为何会占用过多...

    Linux系统问题排查

    本文档将详细介绍Linux系统中常见的问题排查方法,包括CPU问题、内存问题、网络问题以及磁盘问题等。通过这些知识点的学习,可以帮助用户更高效地识别和解决问题,确保系统的稳定性和高性能。 #### 二、CPU问题排查...

    linux 内存和CPU 分析.pdf

    了解如何在Linux中监控和分析内存及CPU使用情况对于排查系统性能问题至关重要。当系统出现延迟、响应慢或者资源耗尽的问题时,这些工具可以帮助你定位问题并采取相应的优化措施。例如,如果发现内存使用过高,可以...

    Linux系统缓存清理脚本

    缓存虽然能够提高数据读取速度,但随着时间的推移,缓存文件会逐渐积累占用大量磁盘空间,并可能导致系统性能下降。因此,开发一个有效的Linux系统缓存清理脚本对于保持系统的高效运行至关重要。 #### 二、基础知识...

    多层面“把脉”Linux运行状态.pdf

    在Linux操作系统中,系统维护和管理是至关重要的任务,尤其是对于服务器环境而言。"多层面“把脉”Linux运行状态"这一主题旨在帮助系统管理员深入理解如何从多个维度监测和评估Linux系统的健康状况。以下是一些关键...

    linux系统与网络监控【笔记】

    ### Linux系统与网络监控知识点详解 #### 一、性能监测简介 **1.1 判定应用的类型** - **I/O限制型应用**: 这类应用的特点是对内存和存储设备有很高的需求,通常需要频繁地进行数据读写操作。由于这类应用的主要...

    Linux性能调优指南,IBM专家资深指导

    《Linux性能调优指南》是IBM专家团队倾力打造的一份深入浅出的教程,旨在帮助用户提升Linux服务器的运行效率和稳定性。这份高清PDF文档详细涵盖了Linux性能优化的各个方面,为管理员提供了一套全面而实用的方法论。...

    Linux教程-linux命令.docx

    - `total`列表示总内存大小,`used`列表示已使用的内存,`free`列表示当前空闲的内存,`shared`列表示共享内存,`buff/cache`列表示缓冲区和缓存占用的内存,而`available`列则显示了系统可用的内存。 - `Swap`部分...

    性能测试指标、监控服务器的一些方法.docx

    - **Deadlocks**:数据库死锁是性能问题的一个信号,需要及时排查和解决。 - **Buffer Cache hit**:缓冲区缓存命中率直接影响数据库读取速度,高命中率意味着更好的性能。 4. **系统瓶颈识别** - 当%user+%sys...

    Mysql CPU占用高的问题解决方法小结

    针对MySQL CPU占用率过高的问题,可以通过以下步骤进行排查和解决: 1. **排除MySQL配置问题**:首先检查MySQL的配置文件,确保没有明显的配置错误或不合理之处。 2. **监控MySQL运行状态**:通过查看MySQL的日志...

    Nginx高性能Web服务器详解

    Nginx是一款开源、高性能、轻量级的Web服务器/反向代理服务器,广泛应用于互联网领域,以其高效的并发处理能力、低内存占用和丰富的模块化设计而著称。在Linux操作系统上运行,Nginx能够提供稳定且快速的服务,是...

    LAMP服务器的性能优化

    - **定期维护**:定期进行性能监控,及时发现并解决瓶颈问题,如内存泄漏、磁盘碎片等。 - **监控与日志**:使用如Nagios、Zabbix等工具监控系统状态,通过Logrotate管理日志,便于故障排查。 综上所述,LAMP...

    Linux目录结构及详细介绍.rar

    在Linux操作系统中,目录结构是系统组织和管理文件的基础。...在日常使用中,了解这些目录的功能可以帮助我们更快地定位问题,进行有效的系统管理和故障排查。学习Linux目录结构是成为Linux高手的第一步。

    LINUX下查看CPU负载的所有命令.docx

    - **buff/cache**: 分别表示作为缓冲区和缓存区的内存数量,有助于提高文件系统效率。 3. **swap**: - **si/so**: 表示从内存进入内存交换区或从内存交换区进入内存的数量。 4. **IO**: - **bi/bo**: 从块...

    WebSphere 各种dump.rar

    4. JSP编译器缓存转储(JSP Cache Dump):展示JSP编译后的Servlet信息,用于JSP相关问题排查。 5. 集群状态转储(Cluster Status Dump):记录集群成员的状态信息,帮助理解集群健康状况。 二、生成dump文件 在...

    MySQL数据库CPU飙升及烂sql记录

    7. **升级硬件**:如果上述方法无法解决问题,可能需要考虑提升服务器硬件性能,如增加CPU核数、提高内存容量等。 通过以上分析,我们可以看到,"MySQL数据库CPU飙升及烂sql记录"是一个多方面的问题,需要从多个...

    vmstat结果内容的解释

    它能够提供系统当前的虚拟内存状态、进程情况、CPU使用率、磁盘I/O活动等关键信息,是系统管理员进行故障排查和性能调优的重要工具之一。下面,我们将对`vmstat`的输出结果进行详细解读,帮助理解和掌握其各项指标的...

    实战Nginx取代Apache的高性能WEB服务器

    - **系统选择**:推荐使用Linux操作系统(如CentOS、Ubuntu等),确保底层环境稳定性。 - **安装依赖**:根据官方文档安装必要的开发工具和库文件。 **步骤二:安装Nginx** - **下载源码编译安装**:这种方式可以...

    Linux查看端口占用lsof -i:port的方法

    在Linux操作系统中,管理和监控系统资源是至关重要的任务之一,特别是在服务器环境中。了解哪些进程正在使用特定端口有助于排查服务是否正常运行、是否有恶意程序占用资源等问题。`lsof`(List Open Files)是一个...

Global site tag (gtag.js) - Google Analytics