篇一:linux下释放经常拷贝文件导致的缓存占用
由于Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.
分析一下缓存的原理和原因
以下引用
在Linux下查看内存我们一般用command free
[root@nonamelinux ~]# free
total used free shared buffers cached
Mem: 386024 377116 8908 0 21280 155468
-/+ buffers/cache: 200368 185656
Swap: 393552 0 393552
下面是对这些数值的解释:
第二行(mem):
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:
第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这 两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例:
185656=8908+21280+155468
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换.
如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
1.减少缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去,
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。
下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。 而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。
#free
#man X
#free
#man X
#free
你可以先后比较一下free后显示buffers的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。
因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles) 使用free命令
将used的值减去buffer和cache的值就是你当前真实内存使用
再来说一下释放这种文件缓存的方法
Shell代码 收藏代码
[root@server ~]# sync
[root@server ~]# echo 3 > /proc/sys/vm/drop_caches
[root@server ~]# free -m
这回再用free命令查看一下内存情况。
设置了这个参数后不是一直起作用,或者是以后就不缓存了。而是只有再执行清除缓存命令的时候才生效。清除完缓存后如果继续进行文
件的读取等操作,还会产生缓存。
想再次释放缓存还得执行上面的3个命令。
篇二:LINUX使用指令释放缓存提升系统运行速度的方法
Linux系统操作久了,就会产生很多看视频、下载文件留下的缓存,如果不定期清理则会导致系统变得很缓慢,下面小编就给大家介绍下Linux释放缓存的方法。
Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?
所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。
要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。
首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
#sync
接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:
#echo 3 》 /proc/sys/vm/drop_caches
此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。
要查询当前缓存释放的参数,可以输入下面的指令:
#cat /proc/sys/vm/drop_caches
上面就是Linux使用指令释放缓存的方法介绍了,如果你觉得你的电脑越来越卡,那么可能是你的内存被大量占用了,不妨对电脑垃圾清理下吧。
篇三:Linux SWAP 分区建立及释放内存
方法一:
一、查看系统当前的分区情况:
>free -m
二、创建用于交换分区的文件:
>dd if=/dev/zero of=/whatever/swap bs=block_size (10M)
count=number_of_block(3000)
三、设置交换分区文件:
>mkswap /export/swap/swapfile
四、立即启用交换分区文件:
>swapon /whateever/swap
五、若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:
/whatever/swap swap swap defaults 0 0
方法二
增加交换分区空间的方法:
1.查看一下/etc/fstab确定目前的分区
2.swapoff /dev/hd**
3.free 看一下是不是停了.
4.fdisk 删了停掉的swap分区
5.重新用FDISK建一个新的SWAP分区
6.mkswap /dev/hd**把新的分区做成swap
7.swapon /dev/hd**打开swap
8.修改/etc/fstab
操作实例:
1.查看系统Swap空间使用
# free
totalusedfree shared buffers cached
Mem: 513980 49364020340 0 143808 271780 -/+ buffers/cache:78052 435928
Swap:105224821256 1030992
2.在空间合适处创建swap文件
# mkdir swap
# cd swap
# dd if=/dev/zero of=swapfile bs=1024 count=10000
10000+0 records in
10000+0 records out
# ls -al
total 10024
drwxr-xr-x 2 root root 4096 7月 28 14:58 .
drwxr-xr-x 19 root root 4096 7月 28 14:57 ..
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
# mkswap swapfile
Setting up swapspace version 1, size = 9996 KiB
3.激活swap文件
# swapon swapfile
# ls -l
total 10016
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
# free
totalusedfree shared buffers cached
Mem: 513980 5050528928 0 143900 282288 -/+ buffers/cache:78864 435116
Swap:106224021256 1040984
生成1G的文件
# dd if=/dev/zero of=swapfile bs=10M count=3000
创建为swap文件
#mkswap swapfile
让swap生效
#swapon swapfile
查看一下swap
#swapon -s
[root@cluster /]# swapon
-sFilename Type Size Used Priority/dev/sda3partition 1020116 1728 -1/state/partition1/swap/swapfile file 30719992 0 -2 加到fstab文件中让系统引导时自动启动
#vi /etc/fstab
/state/partition1/swap/swapfil swap swap defaults 0 0
完毕。
二,Linux释放内存
细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.
先来说说free命令
[root@cluster /]# free -m
totalusedfree shared buffers cached
Mem: 3173031590 139 0 3727537
-/+ buffers/cache:401527714
Swap: 30996 130994
其中:
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached
有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94
那么我们来看看,如果我执行复制文件,内存会发生什么变化.
[root@cluster /]# cp -r /etc ~/test/
[root@cluster /]# free -m
totalusedfree shared buffers cached
Mem: 3173031590 139 0 3727537
-/+ buffers/cache:401527714
Swap: 30996 130994
在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.
引 用[url]/thread-591-1-1.html[/url] 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"
那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?
[root@cluster /]# free -m
totalusedfree shared buffers cached
Mem: 3173031590 139 0 3727537
-/+ buffers/cache:401527714
Swap: 30996 130994
MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!
/proc是一个虚拟文件系统,我们可以通过对它的读写 操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的
行为做出调整.那么我们可以通过调整 /proc/sys/vm/drop_caches来释放内存.操作如下:
[root@cluster /]# cat /proc/sys/vm/drop_caches
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@cluster /]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free -m
totalusedfree shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.
有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become free.
《linux,释放内存》
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/meiwen/36801.html
转载请保留,谢谢!
- 上一篇:会员部工作总结
- 下一篇:三角地电影