Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
2013-12-10 15:38
841 查看
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息
网址: http://www.cnblogs.com/panfeng412/archive/2013/12/10/drop-caches-under-linux-system.html
其中,可以看出内存总量为24675796KB,已使用22617644KB,只剩余2058152KB。
然后,接着通过top命令,shift + M按内存排序后,观察系统中使用内存最大的进程情况,发现只占用了18GB内存,其他进程均很小,可忽略。
因此,还有将近4GB内存(22617644KB-18GB,约4GB)用到什么地方了呢?
进一步,通过cat /proc/meminfo发现,其中有将近4GB(3688732 KB)的Slab内存:
Slab是用于存放内核数据结构缓存,再通过slabtop命令查看这部分内存的使用情况:
发现其中大部分(大约3.5GB)都是用于了dentry_cache。
2. 方法1需要用户具有root权限,如果不是root,但有sudo权限,可以通过sysctl命令进行设置:
操作后可以通过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均可。
http://major.io/2008/12/03/reducing-inode-and-dentry-caches-to-keep-oom-killer-at-bay/ http://linux-mm.org/Drop_Caches
网址: 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.txthttp://major.io/2008/12/03/reducing-inode-and-dentry-caches-to-keep-oom-killer-at-bay/ http://linux-mm.org/Drop_Caches
相关文章推荐
- Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)
- Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
- Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
- [linux]服务器Cache占用过多内存导致系统内存不足问题的排查解决
- Cache占用过多内存导致Linux系统内存不足问题排查
- Cache占用过多内存导致Linux系统内存不足问题排查
- Cache占用过多内存导致Linux系统内存不足问题排查
- Cache占用过多内存导致Linux系统内存不足问题排查
- Cache占用过多内存导致Linux系统内存不足问题排查
- Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
- Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
- Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
- Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
- 解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题
- 【昊昊带你学】android-解决/data/dalvik-cache占用内存的问题
- PHPExcel解决内存占用过大问题-dw 查找memoryCacheSize把1M改为2048M
- 解决w3wp.exe占用内存和CPU的问题(2003系统)
- 解决Linux下php-fpm进程过多导致内存耗尽问题
- win7最大内存设置问题,导致系统无法启动的解决方法
- 解决SQL Server占用内存过多的问题