田春出的这道内存泄露题你们会怎么做?

2014-11-05 11:02:23 +08:00
 jason52
4604 次点击
所在节点    程序员
22 条回复
ChangeTheWorld
2014-11-05 11:20:48 +08:00
被迫重启……先加一个24天自动重启的脚本再说
hjc4869
2014-11-05 11:22:14 +08:00
这种级别的大项目不做好unit test,不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
zlbruce
2014-11-05 11:43:01 +08:00
可以用 valgrind 试试
shawngao
2014-11-05 11:52:47 +08:00
讲下以前公司的做法:

一般是先回退版本,测试找到无内存泄漏的commit,以这个commit新建一个checkbranch,让每个开发人员去diff自己模块的最新版本与这个checkbranch,检查自己修改的代码。

开发人员如果觉得没问题,则将diff提交到checkbranch,由PM编译版本并测试。
通过后进行下一个。
openroc
2014-11-05 11:55:56 +08:00
之前在windows上遇到过,泄露handle的,一次就是4个字节,由于server连续运行,时间长了,就。。。。。 哈哈
min
2014-11-05 11:55:59 +08:00
一天只漏这么一点点,随便插一条内存可以多跑一个月了
不够再加
yanwen
2014-11-05 12:25:11 +08:00
田春 是伞哥么?
yanwen
2014-11-05 12:25:37 +08:00
擦。。一看 还真是伞哥。。。
wdlth
2014-11-05 13:12:19 +08:00
写了这么多代码都不做内存泄露检测的么?
vivyli
2014-11-05 13:19:44 +08:00
@shawngao 感觉这样周期很长,因为说是无法重现,每次rollback都要用客户的环境做测试,一来一回客户就疯掉了。。
LazyZhu
2014-11-05 13:23:26 +08:00
内存dump后看看?
zhangdawei
2014-11-05 13:44:22 +08:00
@vivyli 我们公司也是这么干的,代码历史悠久,别的办法不多。
codepiano
2014-11-05 14:07:46 +08:00
@wdlth @shawngao 印象中他说过是100W行lisp转成300W行c代码再编译,而且是个很久的项目,这个级别很难吧
akira
2014-11-05 15:07:06 +08:00
对内存申请/释放函数做钩子 日志记录下调用入口以及申请的大小以及返回内存地址
跑上一段时间后日志处理下应该就能知道大概是那些调用点出了问题
stormslowly
2014-11-05 17:03:04 +08:00
14正解 很多单元测试框架就搞的。。
cvrock
2014-11-05 17:06:21 +08:00
啥平台?在win下只要开了全页堆windbg扫两眼就能秒杀了。
nsa
2014-11-05 17:07:02 +08:00
日志,日志,还是日志
tabris17
2014-11-05 17:09:02 +08:00
@shawngao 无法重现这个问题
yuezhimsolo
2014-11-05 17:09:27 +08:00
总结:应急 - 先加一个24天自动重启的脚本;思路 - 日志;过程 - 回退版本,测试找到无内存泄漏的commit,以这个commit新建一个checkbranch,让每个开发人员去diff自己模块的最新版本与这个checkbranch,检查自己修改的代码。
关键话:不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
tabris17
2014-11-05 17:10:29 +08:00
@akira 这个才是正解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/144067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX