Linux内存cached释放
2015-07-13 14:54
477 查看
/article/7906668.html
我们用free命令查看系统内存使用情况的时候会发现:
#free -m
total used free shared buffers cachedMem: 24359 11240 13119 0 0 10706-/+ buffers/cache:
533 23826Swap: 4095 0 4095
1、total = used + free
2、cached比较大,甚至我遇见过内存剩余只有7M的情况,这个时候cached非常大,基本上接近等于total了,这个时候打开文件或者传输文件的时候可用内存很小,程序可能就会用到交换分区swap了,所以会发现机器速度变慢的情况
cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .
Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多。
为了提高磁盘存取效率, Linux做了一些精心的设计,
除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"
如何解决这个导致机器变慢的问题呢?
罪魁祸首就是内存都被cached了,free的基本没有了
所以我们应该想想如何把cached内存释放出来
重启机器肯定是可以解决,但是我们肯定是不能用这样的办法
释放方法有三种(系统默认值是0,释放之后你可以再改回0值):
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
经常使用rsync传输大量数据的朋友可能遇到过类似的情况:开始是传输大量文件过去,到后来传输的数据并不大,但就是很慢很慢,到对边的服务器上看会发现在终端输入命令都不会觉得慢,但看内存使用情况时,发现free的内存很少,几乎接近零了,我觉得可能就是内存都被cached了导致的
为什么我们要释放掉cached内存?因为我们用rsync传输大量数据的时候,linux系统将一部分文件的信息缓存在内存中,这样是可以减少频繁使用的文件的磁盘IO时间占用,当我们传完一批文件后,我们要传输另外一批文件过去,是完全不同的文件或者文件的内容发生了变化,内存中缓存的文件也不是我们需要的了,我们需要清空缓存,腾出内存用来传输下一批文件使用,这个时候我们急切的需要看到更多的内存是free状态的。
在这样的前提下,我们有必要自己手动清空缓存,腾出更多可用内存来
注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上
我们用free命令查看系统内存使用情况的时候会发现:
#free -m
total used free shared buffers cachedMem: 24359 11240 13119 0 0 10706-/+ buffers/cache:
533 23826Swap: 4095 0 4095
1、total = used + free
2、cached比较大,甚至我遇见过内存剩余只有7M的情况,这个时候cached非常大,基本上接近等于total了,这个时候打开文件或者传输文件的时候可用内存很小,程序可能就会用到交换分区swap了,所以会发现机器速度变慢的情况
cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .
Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多。
为了提高磁盘存取效率, Linux做了一些精心的设计,
除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"
如何解决这个导致机器变慢的问题呢?
罪魁祸首就是内存都被cached了,free的基本没有了
所以我们应该想想如何把cached内存释放出来
重启机器肯定是可以解决,但是我们肯定是不能用这样的办法
释放方法有三种(系统默认值是0,释放之后你可以再改回0值):
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
经常使用rsync传输大量数据的朋友可能遇到过类似的情况:开始是传输大量文件过去,到后来传输的数据并不大,但就是很慢很慢,到对边的服务器上看会发现在终端输入命令都不会觉得慢,但看内存使用情况时,发现free的内存很少,几乎接近零了,我觉得可能就是内存都被cached了导致的
为什么我们要释放掉cached内存?因为我们用rsync传输大量数据的时候,linux系统将一部分文件的信息缓存在内存中,这样是可以减少频繁使用的文件的磁盘IO时间占用,当我们传完一批文件后,我们要传输另外一批文件过去,是完全不同的文件或者文件的内容发生了变化,内存中缓存的文件也不是我们需要的了,我们需要清空缓存,腾出内存用来传输下一批文件使用,这个时候我们急切的需要看到更多的内存是free状态的。
在这样的前提下,我们有必要自己手动清空缓存,腾出更多可用内存来
注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上
相关文章推荐
- Linux系统性能测试与分析1-整体分析
- CentOS下yum安装g++
- Linux系统内存的Cached Memory
- CentOS6.5 忘记root密码怎么解决?
- windows与linux系统互相拷贝文件
- 网卡混杂模式Promiscuous与linux上混杂模式的设置
- Linux中断完全分析
- Linux系统日常管理-Linux防火墙
- CentOS 6.4 自建yum源
- 为什么虚拟机的linux系统IP是10.0.2.15
- linux 下修改mysql 的root密码
- beaglebone black上使用TI sdk中的linux系统来编写spi驱动
- 嵌入式Linux串口应用编程
- 总结七:Linux用户和组及其相关命令
- Linux和Windows堆栈溢出利用对比
- 基于 SquashFS 构建 Linux 可读写文件系统
- 基于Linux与Busybox的Reboot命令流程分析
- Linux下引用类库报undefined symbol错误的解决方法
- centos安装JDK
- linux 系统安装mysql (rpm)