linux清理内存的命令 linux 清理( 二 )


Buffer cache则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用 。这意味着某些对块的操作会使用buffer cache进行缓存,比如我们在格式化文件系统的时候 。一般情况下两个缓存系统是一起配合使用的 , 比如当我们对一个文件进行写操作的时候,page cache的内容会被改变 , 而buffer cache则可以用来将page标记为不同的缓冲区,并记录是哪一个缓冲区被修改了 。这样 , 内核在后续执行脏数据的回写(writeback)时 , 就不用将整个page写回,而只需要写回修改的部分即可 。
Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用 。一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放 。尤其是被使用更多的cache空间 。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放cache,作为free空间分给相关进程使用 。所以一般情况下,我们认为buffer/cache空间可以被释放,这个理解是正确的 。
但是这种清缓存的工作也并不是没有成本 。理解cache是干什么的就可以明白清缓存必须保证cache中的数据跟对应文件中的数据一致,才能对cache进行 释放。所以伴随着cache清除的行为的,一般都是系统IO飙高 。因为内核要对比cache中的数据和对应硬盘文件上的数据是否一致 , 如果不一致需要写回,之后才能回收 。
在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的操作:
[root@tencent64 ~]# cat /proc/sys/vm/drop_caches
1
方法是:
echo 1/proc/sys/vm/drop_caches
当然,这个文件可以设置的值分别为1、2、3 。它们所表示的含义为:
sync //先做同步数据 防止数据部分丢失
echo 1/proc/sys/vm/drop_caches:表示清除pagecache 。
echo 2/proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存) 。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache 。
echo 3/proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象 。
#!/bin/bashecho"开始清理缓存"
sync;sync;sync#写入硬盘,防止数据丢失
sleep 10#延迟10秒
echo 1/proc/sys/vm/drop_cachesecho"清理结束"
设置定时任务
crontab -e
* 0 * * * /root/cleanBuff.sh
crontab -l//查看是否设置成功
linux如何清理内存1、使用free命令查看一下当前内存使用情况
free
total used free shared buffers cached
Mem: 16621896 8967952 7653944 0 212352 8377276
-/+ buffers/cache: 378324 16243572
Swap: 10241428 0 10241428
#针对free命令后出现的信息解释
#total:总计物理内存的大小
#used:已使用多大
#free:可用有多少
#Shared:多个进程共享的内存总额
#Buffers/cached:磁盘缓存的大小
2、执行sync同步数据
sync
#该命令将未写的系统缓冲区写到磁盘中
#包含已修改的 i-node、已延迟的块 I/O 和读写映射文件 。
3、清理cache(缓存)
echo 3/proc/sys/vm/drop_caches
free
total used free shared buffers cached
Mem: 16621896 579592 16042304 0 268 308708
-/+ buffers/cache: 270616 16351280
Swap: 10241428 0 10241428
4、对比步骤1和3的free命令,used(减少)、free(增大)对应Mem部分就清楚了,cache(缓存)被清理掉了 。
正确理解linux运行内存过高的问题以及free命令周末闲来无事,查看了一下服务器的运行状态 。发现通过监控页面可以看到,服务器的运行内存一直占用在98%左右 , 难道服务器出现什么问题了???

推荐阅读