免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5228 | 回复: 10
打印 上一主题 下一主题

写文件为什么会导致内存涨 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-05 10:30 |只看该作者 |倒序浏览
最近碰到一个问题,不得其解。

一个很简单的程序,只是从服务端接收数据,然后根据规则写文件。

使用top命令可以看到系统所使用物理内存一直在涨,但是这个程序所占用的物理内存还是正常的。

运行一段时间后系统越来越慢,直至当前用户死掉

论坛徽章:
0
2 [报告]
发表于 2010-09-05 10:36 |只看该作者
本来系统是有个cache memory的,为了是对文件的读写效率高,系统不会立即释放的。
但是没理由一直涨到使当前系统死掉吧!

关键是程序本身的内存使用正常,排除了程序本身的内存泄露,那是什么原因导致的呢?

论坛徽章:
0
3 [报告]
发表于 2010-09-05 10:43 |只看该作者
怎么排除的

你试一下写一个最基本的程序写文件

如果还是会内存暴涨那才考虑系统问题吧

论坛徽章:
0
4 [报告]
发表于 2010-09-05 10:48 |只看该作者
是试着把程序在valgrind下运行一段时间,然后正常退出,是没有监测到程序有内存泄露的。

也试着写一个很简单的程序,只写文件,发现系统的物理内存也算一直在涨

论坛徽章:
0
5 [报告]
发表于 2010-09-05 10:50 |只看该作者
如果不是系统的问题,是不是需要在关闭文件的时候把cache memory释放掉才行,linux下有这样子的函数吗?

论坛徽章:
0
6 [报告]
发表于 2010-09-05 11:00 |只看该作者
你的小程序是怎么样的? 贴出来看看

我这边是没碰上过这种事情 你用的是什么操作系统

论坛徽章:
0
7 [报告]
发表于 2010-09-05 11:01 |只看该作者
本帖最后由 学与思 于 2010-09-05 11:04 编辑

内核做的文件cache,但应该不会让你的程序死掉才对

论坛徽章:
0
8 [报告]
发表于 2010-09-05 18:43 |只看该作者
也不要猜来猜去了,将free 和 ps aux 的输出贴出来,看看是什么问题引起吧

论坛徽章:
0
9 [报告]
发表于 2010-09-07 21:52 |只看该作者
问题已经找到了,fwrite不能太快,因为我的应用中主要是接收数据然后写文件,如果每次收到数据的时候先打开文件,然后写入,关闭,这样子的流程是不会有问题的,但是如果只打开一次文件句柄,收到数据的时候写文件,程序占用的物理内存会一直涨的。。

另外,改用aio异步写文件的话,内存也是不涨的。。。。。

论坛徽章:
0
10 [报告]
发表于 2015-11-17 18:29 |只看该作者
回复 9# pdsxw123
哥们你是怎么做的,我按你说的方法,异步的、关闭流然后再打开,可内存还是在不断的上涨呢,请赐教


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP