• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jason52
V2EX  ›  程序员

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

  •  
  •   jason52 · Nov 5, 2014 · 5364 views
    This topic created in 4233 days ago, the information mentioned may be changed or developed.
    
    22 replies    2014-11-05 17:16:29 +08:00
    ChangeTheWorld
        1
    ChangeTheWorld  
       Nov 5, 2014
    被迫重启……先加一个24天自动重启的脚本再说
    hjc4869
        2
    hjc4869  
       Nov 5, 2014
    这种级别的大项目不做好unit test,不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
    zlbruce
        3
    zlbruce  
       Nov 5, 2014
    可以用 valgrind 试试
    shawngao
        4
    shawngao  
       Nov 5, 2014
    讲下以前公司的做法:

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

    开发人员如果觉得没问题,则将diff提交到checkbranch,由PM编译版本并测试。
    通过后进行下一个。
    openroc
        5
    openroc  
       Nov 5, 2014
    之前在windows上遇到过,泄露handle的,一次就是4个字节,由于server连续运行,时间长了,就。。。。。 哈哈
    min
        6
    min  
       Nov 5, 2014   ❤️ 1
    一天只漏这么一点点,随便插一条内存可以多跑一个月了
    不够再加
    yanwen
        7
    yanwen  
       Nov 5, 2014
    田春 是伞哥么?
    yanwen
        8
    yanwen  
       Nov 5, 2014
    擦。。一看 还真是伞哥。。。
    wdlth
        9
    wdlth  
       Nov 5, 2014
    写了这么多代码都不做内存泄露检测的么?
    vivyli
        10
    vivyli  
       Nov 5, 2014
    @shawngao 感觉这样周期很长,因为说是无法重现,每次rollback都要用客户的环境做测试,一来一回客户就疯掉了。。
    LazyZhu
        11
    LazyZhu  
       Nov 5, 2014
    内存dump后看看?
    zhangdawei
        12
    zhangdawei  
       Nov 5, 2014
    @vivyli 我们公司也是这么干的,代码历史悠久,别的办法不多。
    codepiano
        13
    codepiano  
       Nov 5, 2014
    @wdlth @shawngao 印象中他说过是100W行lisp转成300W行c代码再编译,而且是个很久的项目,这个级别很难吧
    akira
        14
    akira  
       Nov 5, 2014   ❤️ 1
    对内存申请/释放函数做钩子 日志记录下调用入口以及申请的大小以及返回内存地址
    跑上一段时间后日志处理下应该就能知道大概是那些调用点出了问题
    stormslowly
        15
    stormslowly  
       Nov 5, 2014
    14正解 很多单元测试框架就搞的。。
    cvrock
        16
    cvrock  
       Nov 5, 2014
    啥平台?在win下只要开了全页堆windbg扫两眼就能秒杀了。
    nsa
        17
    nsa  
       Nov 5, 2014 via iPad
    日志,日志,还是日志
    tabris17
        18
    tabris17  
       Nov 5, 2014
    @shawngao 无法重现这个问题
    yuezhimsolo
        19
    yuezhimsolo  
       Nov 5, 2014
    总结:应急 - 先加一个24天自动重启的脚本;思路 - 日志;过程 - 回退版本,测试找到无内存泄漏的commit,以这个commit新建一个checkbranch,让每个开发人员去diff自己模块的最新版本与这个checkbranch,检查自己修改的代码。
    关键话:不在每个unit test上考虑可能产生内存泄漏的地方,就是作死。
    tabris17
        20
    tabris17  
       Nov 5, 2014
    @akira 这个才是正解
    tabris17
        21
    tabris17  
       Nov 5, 2014
    这道题目的关键在于“无法重现这个问题”。否则很好解决,无论是倒退版本做code review还是调试或dump内存。
    tabris17
        22
    tabris17  
       Nov 5, 2014
    另外不是有静态代码检查工具的嘛,不是CPPer,具体不清楚
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   958 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 20:01 · PVG 04:01 · LAX 13:01 · JFK 16:01
    ♥ Do have faith in what you're doing.