V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
freefcw
V2EX  ›  PHP

php5.5.9 存在内存泄露

  •  
  •   freefcw · 2015-02-27 20:53:30 +08:00 · 4491 次点击
    这是一个创建于 3556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用Laravel的Command导入数据,随着内存直线飙升,最后OOM。用xhprof找内存都用在哪里了,发现都消耗在了闭包中,具体位置在Illuminate\Database\Connection::runQueryCallback函数中。

    写函数测试:

    public function testDB()
    {
        for($i = 0; $i < 1000000; $i ++)
        {
            if ( $i % 100 == 0)
                $this->comment($i);
            \DB::connection()->select('select * from albums limit 1');
        }
    }
    

    运行也是内存随执行次数成正比,结果和分析一致。

    升级到5.6.6以后,就没有再出现内存暴涨的问题了,估计是php5.5中对闭包处理不够好

    印象中homebrew带的也是5.5,之前使用这个方法导数据的时候也出现过内存泄露的问题,当时找了半天没找到问题在哪里,估计就是如此,回家再试试。

    第 1 条附言  ·  2015-02-28 13:03:46 +08:00
    估计有误判了什么地方,不过当时内存肯定是有泄露的

    家里的Laravel 4.2的在加上

    DB::connection()->disableQueryLog();

    内存就没有再增长了。

    之前因为是破坏性的升级到5.6,没有办法恢复之前的环境重测了。

    重新做了一个5.5.9的环境,没有复现这个泄露。可能有扩展的差异,有时间再去研究了。
    6 条回复    2015-02-28 18:21:01 +08:00
    mactalk
        1
    mactalk  
       2015-02-27 20:59:52 +08:00
    https://bugs.php.net/ 给报一个?
    thankyourtender
        2
    thankyourtender  
       2015-02-28 09:58:42 +08:00
    用原生的MySQL查询测试一下?
    freefcw
        3
    freefcw  
    OP
       2015-02-28 13:04:59 +08:00
    @mactalk 昨天破坏了现场,没有办法复现了,估计可能是什么其他地方有问题。找个时间再看看


    @thankyourtender 嗯,谢谢。
    kn007
        4
    kn007  
       2015-02-28 15:11:54 +08:00
    期待最终结果,目前用的也是5.5
    kimmykuang
        5
    kimmykuang  
       2015-02-28 16:05:12 +08:00
    mark下,mac用brew装的就是5.5吧
    Jaylee
        6
    Jaylee  
       2015-02-28 18:21:01 +08:00
    @kimmykuang 我也是用brew装的 5.6.12
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:27 · PVG 21:27 · LAX 05:27 · JFK 08:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.