频繁读写文件导致内存使用率过高

更新时间:2023-07-13 11:57:31 阅读: 评论:0

频繁读写⽂件导致内存使⽤率过⾼头发出油怎么治疗
问陈淑桦最近接到⼀个客户反馈,说是服务器内存使⽤过⾼,总内存16G,使⽤top命令查看可⽤内存已经不⾜1G了。
客户环境服务器为linux,部署了3个tomcat,每个tomcat均有⼤量的⽇志产⽣。
让客户使⽤free -m检查⼀下
此处有必要解释⼀下free命令返回的各个参数的意思(直接转了)。
解释:
total:是总的物理内存
ud:使⽤中的内存
free:完全空闲的内存初中必读12本名著
shared:多个进程共享的内存 
buffers:写缓存,在写⼊磁盘之前,先把数据缓存⼀段时间,可以释放
cache:读缓存,读取过的⽂件,会缓存⼀段时间。可以释放
-buffers/cache:应⽤程序实际使⽤中的内存⼤⼩,等于ud-buffers-cached(Mem列的三个数)
+buffers/cache:可供使⽤的内存总量,等于free+buffers+cached(Mem列的三个数)
显卡型号怎么看Swap:不解释,都能看懂的航运公司排名
可⽤看到cache已经达到10G了。是什么导致cache如此之⼤呢?
北京大学教育学院⽹上可⽤查到解释:
什么是Cache Memory(缓存内存):
当你读写⽂件的时候,Linux内核为了提⾼读写性能与速度,会将⽂件在内存中进⾏缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运⾏结束后,Cache Memory也不会⾃动释放。这就会导致你在Linux系统中程序频繁读写⽂件后,你会发现可⽤物理内存会很少。
其实这缓存内存(Cache Memory)在你需要使⽤内存的时候会⾃动释放,所以你不必担⼼没有内存可⽤。
如果你希望⼿动去释放Cache Memory也是有办法的。
为了确认这种情况是由于⽂件读写造成的,以及该情况下不影响程序正常运⾏(cache能正确⾃动释放),特进⾏试验。
环境准备
内存8G,我准备了⼀个近2G的⽂件。下⾯进⾏cp操作并检查cached的数值。河南周口
通过测试可以发现可⽤内存越来越少,cached的内存越来越⼤,经过⼏次cp之后可⽤内存已经只有142m了。
此时我启动了3个tomcat,然后再kill掉这3个tomcat进程。
tomcat进程启动没有报内存溢出,把3个tomcat进程kill掉之后free明显多了(原先被⽂件读写占⽤的cached内存在free不⾜的时候回收了被tomcat占⽤,在tomcat被kill之后释放出来)。
结论:
1、linux系统在⽂件读写时会写⼊内存缓存,导致“看上去”可⽤内存会减少。
2、cached掉的内存不⽤担⼼,在需要内存时会释放出来。
3、cached掉的内存在需要释放时也不是全部释放的,⽽是⼀部分⼀部分的释放的。
附⼿动释放cached内存的⽅式:
如何释放Cache Memory(缓存内存):
⽤下⾯的命令可以释放Cache Memory:
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
学生就业注意,释放前最好sync⼀下,防⽌丢失数据。

本文发布于:2023-07-13 11:57:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079812.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内存   释放   读写   缓存
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图