linux使用top查看buff/cache过高 您所在的位置:网站首页 linux查io占用 linux使用top查看buff/cache过高

linux使用top查看buff/cache过高

#linux使用top查看buff/cache过高| 来源: 网络整理| 查看: 265

查看 top 效果如下: KiB Mem : 16000000 total, 4000000 free, 4000000 used, 8000000 buff/cache

发现,使用不高,但是可用很低,是因为 buff/cache 占用了很多。

原因

linux存取文件会导致内存被用光,即便是程序结束后也不会被正常释放,这就会导致buffers和cached占用过高。

total:是指计算机总物理内存 used:已用的内存 free:空余的内存 total = used + free总内存 shared:被多个进程共享的内存 buffers:用于存放要输出到disk(块存储)的数据,在这里buff是指被OS buffer住的内存 cached:存放从disk上读出的数据;buffer和cache是为了提高IO性能并由OS管理

解决方法

linux有先进的缓存机制,会针对dentry、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。 服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,是因为drop_caches的默认参数设置的就是不释放的。

drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 3:释放所有缓存

启动定时任务 crontab -e

如下定时任务:

0 3 * * * /usr/bin/sh /app/free_mem.sh SH 文件 #! /bin/sh used=`free -m | awk 'NR==2' | awk '{print $3}'` free=`free -m | awk 'NR==2' | awk '{print $4}'` echo "===========================" >> /app/logs/mem.log date >> /app/logs/mem.log echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /app/logs/mem.log if [ $free -le 6000 ] ; then sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_caches used_ok=`free -m | awk 'NR==2' | awk '{print $3}'` free_ok=`free -m | awk 'NR==2' | awk '{print $4}'` echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /app/logs/mem.log echo "OK" >> /app/logs/mem.log else echo "Not required" >> /app/logs/mem.log fi exit 1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有