通用方案:5U和6U系统的dentry_cache占用内存过多导致系统负载过高

通用方案:5U和6U系统的dentry_cache占用内存过多导致系统负载过高

更新时间:2020-07-10 15:16:56

1. 概述

本文主要介绍在专有云环境,5U和6U系统的dentry_cache占用内存过多导致系统负载过高的解决方法。

1.1. 适用范围

  • 专有云V2
  • 专有云V3
    说明:本文只适用于5U和6U系统的物理机。

1.2. 用户告知

  • 操作复杂度:低
  • 风险等级:中
    说明:清空缓存会导致系统百毫秒级的间断,从而造成系统负载过高出现卡顿,建议业务低峰期操作,并且一台一台操作。

2. 问题描述

专有云环境5U和6U系统的物理机中,slab内存中Dentry的使用率较高,内核在跟dentry_cache相关操作重复的情况下会导致dcache_lock竞争。从而造成系统负载过高。严重时系统会出现短暂的卡顿,系统运行时间较长所导致,建议重启系统彻底解决此问题。若系统无法重启,可通过本方案,临时清空缓存以解决此问题。

3. 解决方案

3.1. 环境检查

版本检查

适用于5U系统

登录5U系统的物理机,执行以下任意一条命令,确认物理机为5U系统。

uname -r
cat /etc/redhat-release
适用于6U系统

登录6U系统的物理机,执行以下命令,确认物理机为6U系统。

uname -r

确认dentry_cache占用系统内存过多

分别登录5U和6U系统的物理机,执行以下命令,确认dentry_cache内存使用率过高。

slabtop

系统显示类似如下。

{8B04A0A6-C102-4F0F-AD36-4BB92F673228}_20191216114802.jpg

记录min_free_kbytes参数的值

分别登录5U和6U系统的物理机,执行以下命令,查看并记录min_free_kbytes参数的值。

cat /proc/sys/vm/min_free_kbytes

系统显示类似如下。

{93411141-ACC6-4D67-B7AC-D37B7861CF32}_20191216110610.jpg

3.2. 实施步骤

以下操作5U和6U系统的物理机都适用,本文以5U系统为例。

释放drop_cache进程

登录5U系统的物理机,依次执行以下命令,释放drop_cache进程。

sync
echo 1 > /proc/sys/vm/vfs_cache_pressure
echo 2 > /proc/sys/vm/drop_caches
echo 100 > /proc/sys/vm/vfs_cache_pressure

调整虚拟内存回收

执行以下命令,调整虚拟内存的参数。

echo 8192000 > /proc/sys/vm/min_free_kbytes

3.3. 结果验证

登录5U系统的物理机,执行以下命令,确认系统负载降低。

slabtop

系统显示类似如下。

{6EF9C51B-52A4-4CF9-8D6C-9AD0351F2D36}_20191216115005.jpg

4. 回滚方案

登录5U系统的物理机,执行以下命令,将调整的虚拟内存参数还原。

echo 524288 > /proc/sys/vm/min_free_kbytes

说明:虚拟内存参数的值,本文以环境检查中的524288为例,现场以实际情况为准。