作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息
网址: 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下buff/cache占用过高",这是一个常见的系统性能优化问题,尤其是对于运行Java应用或者其他资源密集型服务的云服务器而言。这里我们将深入探讨buff/cache的作用、为何会占用过多...
本文档将详细介绍Linux系统中常见的问题排查方法,包括CPU问题、内存问题、网络问题以及磁盘问题等。通过这些知识点的学习,可以帮助用户更高效地识别和解决问题,确保系统的稳定性和高性能。 #### 二、CPU问题排查...
了解如何在Linux中监控和分析内存及CPU使用情况对于排查系统性能问题至关重要。当系统出现延迟、响应慢或者资源耗尽的问题时,这些工具可以帮助你定位问题并采取相应的优化措施。例如,如果发现内存使用过高,可以...
缓存虽然能够提高数据读取速度,但随着时间的推移,缓存文件会逐渐积累占用大量磁盘空间,并可能导致系统性能下降。因此,开发一个有效的Linux系统缓存清理脚本对于保持系统的高效运行至关重要。 #### 二、基础知识...
在Linux操作系统中,系统维护和管理是至关重要的任务,尤其是对于服务器环境而言。"多层面“把脉”Linux运行状态"这一主题旨在帮助系统管理员深入理解如何从多个维度监测和评估Linux系统的健康状况。以下是一些关键...
### Linux系统与网络监控知识点详解 #### 一、性能监测简介 **1.1 判定应用的类型** - **I/O限制型应用**: 这类应用的特点是对内存和存储设备有很高的需求,通常需要频繁地进行数据读写操作。由于这类应用的主要...
《Linux性能调优指南》是IBM专家团队倾力打造的一份深入浅出的教程,旨在帮助用户提升Linux服务器的运行效率和稳定性。这份高清PDF文档详细涵盖了Linux性能优化的各个方面,为管理员提供了一套全面而实用的方法论。...
- `total`列表示总内存大小,`used`列表示已使用的内存,`free`列表示当前空闲的内存,`shared`列表示共享内存,`buff/cache`列表示缓冲区和缓存占用的内存,而`available`列则显示了系统可用的内存。 - `Swap`部分...
- **Deadlocks**:数据库死锁是性能问题的一个信号,需要及时排查和解决。 - **Buffer Cache hit**:缓冲区缓存命中率直接影响数据库读取速度,高命中率意味着更好的性能。 4. **系统瓶颈识别** - 当%user+%sys...
针对MySQL CPU占用率过高的问题,可以通过以下步骤进行排查和解决: 1. **排除MySQL配置问题**:首先检查MySQL的配置文件,确保没有明显的配置错误或不合理之处。 2. **监控MySQL运行状态**:通过查看MySQL的日志...
Nginx是一款开源、高性能、轻量级的Web服务器/反向代理服务器,广泛应用于互联网领域,以其高效的并发处理能力、低内存占用和丰富的模块化设计而著称。在Linux操作系统上运行,Nginx能够提供稳定且快速的服务,是...
- **定期维护**:定期进行性能监控,及时发现并解决瓶颈问题,如内存泄漏、磁盘碎片等。 - **监控与日志**:使用如Nagios、Zabbix等工具监控系统状态,通过Logrotate管理日志,便于故障排查。 综上所述,LAMP...
在Linux操作系统中,目录结构是系统组织和管理文件的基础。...在日常使用中,了解这些目录的功能可以帮助我们更快地定位问题,进行有效的系统管理和故障排查。学习Linux目录结构是成为Linux高手的第一步。
- **buff/cache**: 分别表示作为缓冲区和缓存区的内存数量,有助于提高文件系统效率。 3. **swap**: - **si/so**: 表示从内存进入内存交换区或从内存交换区进入内存的数量。 4. **IO**: - **bi/bo**: 从块...
4. JSP编译器缓存转储(JSP Cache Dump):展示JSP编译后的Servlet信息,用于JSP相关问题排查。 5. 集群状态转储(Cluster Status Dump):记录集群成员的状态信息,帮助理解集群健康状况。 二、生成dump文件 在...
7. **升级硬件**:如果上述方法无法解决问题,可能需要考虑提升服务器硬件性能,如增加CPU核数、提高内存容量等。 通过以上分析,我们可以看到,"MySQL数据库CPU飙升及烂sql记录"是一个多方面的问题,需要从多个...
它能够提供系统当前的虚拟内存状态、进程情况、CPU使用率、磁盘I/O活动等关键信息,是系统管理员进行故障排查和性能调优的重要工具之一。下面,我们将对`vmstat`的输出结果进行详细解读,帮助理解和掌握其各项指标的...
- **系统选择**:推荐使用Linux操作系统(如CentOS、Ubuntu等),确保底层环境稳定性。 - **安装依赖**:根据官方文档安装必要的开发工具和库文件。 **步骤二:安装Nginx** - **下载源码编译安装**:这种方式可以...
在Linux操作系统中,管理和监控系统资源是至关重要的任务之一,特别是在服务器环境中。了解哪些进程正在使用特定端口有助于排查服务是否正常运行、是否有恶意程序占用资源等问题。`lsof`(List Open Files)是一个...