田春出的这道内存泄露题你们会怎么做? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jason52
V2EX    程序员

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

  •  
  •   jason52 2014-11-05 11:02:23 +08:00 5085 次点击
    这是一个创建于 4040 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    22 条回复    2014-11-05 17:16:29 +08:00
    ChangeTheWorld
        1
    ChangeTheWorld  
       2014-11-05 11:20:48 +08:00
    被迫重启……先加一个24天自动重启的脚本再说
    hjc4869
        2
    hjc4869  
       2014-11-05 11:22:14 +08:00
    这种级别的大项目不做好unit test,不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
    zlbruce
        3
    zlbruce  
       2014-11-05 11:43:01 +08:00
    可以用 valgrind 试试
    shawngao
        4
    shawngao  
       2014-11-05 11:52:47 +08:00
    讲下以前公司的做法:

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

    开发人员如果觉得没问题,则将diff提交到checkbranch,由PM编译版本并测试。
    通过后进行下一个。
    openroc
        5
    openroc  
       2014-11-05 11:55:56 +08:00
    之前在windows上遇到过,泄露handle的,一次就是4个字节,由于server连续运行,时间长了,就。。。。。 哈哈
    min
        6
    min  
       2014-11-05 11:55:59 +08:00   1
    一天只漏这么一点点,随便插一条内存可以多跑一个月了
    不够再加
    yanwen
        7
    yanwen  
       2014-11-05 12:25:11 +08:00
    田春 是伞哥么?
    yanwen
        8
    yanwen  
       2014-11-05 12:25:37 +08:00
    擦。。一看 还真是伞哥。。。
    wdlth
        9
    wdlth  
       2014-11-05 13:12:19 +08:00
    写了这么多代码都不做内存泄露检测的么?
    vivyli
        10
    vivyli  
       2014-11-05 13:19:44 +08:00
    @shawngao 感觉这样周期很长,因为说是无法重现,每次rollback都要用客户的环境做测试,一来一回客户就疯掉了。。
    LazyZhu
        11
    LazyZhu  
       2014-11-05 13:23:26 +08:00
    内存dump后看看?
    zhangdawei
        12
    zhangdawei  
       2014-11-05 13:44:22 +08:00
    @vivyli 我们公司也是这么干的,代码历史悠久,别的办法不多。
    codepiano
        13
    codepiano  
       2014-11-05 14:07:46 +08:00
    @wdlth @shawngao 印象中他说过是100W行lisp转成300W行c代码再编译,而且是个很久的项目,这个级别很难吧
    akira
        14
    akira  
       2014-11-05 15:07:06 +08:00   1
    对内存申请/释放函数做钩子 日志记录下调用入口以及申请的大小以及返回内存地址
    跑上一段时间后日志处理下应该就能知道大概是那些调用点出了问题
    stormslowly
        15
    stormslowly  
       2014-11-05 17:03:04 +08:00
    14正解 很多单元测试框架就搞的。。
    cvrock
        16
    cvrock  
       2014-11-05 17:06:21 +08:00
    啥平台?在win下只要开了全页堆windbg扫两眼就能秒杀了。
    nsa
        17
    nsa  
       2014-11-05 17:07:02 +08:00 via iPad
    日志,日志,还是日志
    tabris17
        18
    tabris17  
       2014-11-05 17:09:02 +08:00
    @shawngao 无法重现这个问题
    yuezhimsolo
        19
    yuezhimsolo  
       2014-11-05 17:09:27 +08:00
    总结:应急 - 先加一个24天自动重启的脚本;思路 - 日志;过程 - 回退版本,测试找到无内存泄漏的commit,以这个commit新建一个checkbranch,让每个开发人员去diff自己模块的最新版本与这个checkbranch,检查自己修改的代码。
    关键话:不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
    tabris17
        20
    tabris17  
       2014-11-05 17:10:29 +08:00
    @akira 这个才是正解
    tabris17
        21
    tabris17  
       2014-11-05 17:12:44 +08:00
    这道题目的关键在于“无法重现这个问题”。否则很好解决,无论是倒退版本做code review还是调试或dump内存。
    tabris17
        22
    tabris17  
       2014-11-05 17:16:29 +08:00
    另外不是有静态代码检查工具的嘛,不是CPPer,具体不清楚
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:08 PVG 09:08 LAX 17:08 JFK 20:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86