内存泄漏symfony和monolog和控制台

时间:2016-03-13 23:28:50

标签: php symfony memory-leaks doctrine-orm monolog

我花了最后2个小时试图找到我的内存泄漏。

  • 优化了学说批量处理
  • 优化了我的分离和所有教条注释的内容
  • 优化了SQL Logger
  • 剧本仍在泄露
  • 决定将日志记录注释掉,因为无论如何我都无法做到。

原来那个

  • 超过40k次迭代而没有记录每个n但模数为50,启动mem:28 mb end mem:30mb
  • 超过5k次迭代,记录每个n,无模数,启动mem:28mb,end mem 38mb。

实施例

 # this leaks
 # start mem: 28 mb end mem: 38mb, n = 5k
 foreach ($this->queryData->iterate() as $j => $data):
            declare(ticks = 1);
            self::$currentAd++;
            $this->em->detach($data[0]);
            $this->logger->info(LogUtility::getMemoryUsage() . " (" . self::$currentAd .")");
            if(self::$currentAd === 40000 ):
                break(2);
            endif;
  endforeach;

 # this doesn't leak
 # start mem: 28 mb end mem: 30mb, n = 40k
 foreach ($this->queryData->iterate() as $j => $data):
            declare(ticks = 1);
            self::$currentAd++;
            $this->em->detach($data[0]);
            if(self::$currentAd % 50 == 0):
                  $this->logger->info(LogUtility::getMemoryUsage() . " (" . self::$currentAd .")");
            endif;
            if(self::$currentAd === 40000 ):
                break(2);
            endif;
  endforeach;

我的monolog配置:

 handlers:
    test:
        type:   stream
        path:   "%kernel.logs_dir%/immobilier/test.log"
        level:  debug
        channels: test
  console:
        type:   console
        bubble: false
        verbosity_levels:
            VERBOSITY_VERBOSE: INFO
            VERBOSITY_VERY_VERBOSE: DEBUG
        channels: [test]

有任何纠正此事的建议吗?

3 个答案:

答案 0 :(得分:6)

找到解决方案。我不能告诉你这种内存泄漏发生的确切原因,但是根据this的说法;在命令中添加--no-debug选项可以解决问题。它实际上做了,它甚至减少了2mb的内存。干杯!

答案 1 :(得分:0)

有趣的是,当我添加该选项时,内存使用量实际上翻倍。调用垃圾收集似乎也无法解决这个问题。

答案 2 :(得分:0)

除了@delmalki的答案外,您可能还想检查是否有任何fingers_crossed处理函数并设置buffer_size

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: critical
            handler: grouped
            excluded_404s:
                - ^
            buffer_size: 30