2015-04-02 5 views
2

У меня есть длительный процесс в Symfony2 (потребитель кролика), и я использую MonologBundle для регистрации. Линии регистрируются немедленно, но я заметил, что потребление памяти в процессе увеличивается с каждой итерацией, и достигает 1 ГБ после минут.Ошибка утечки памяти MonologBundle (?)

Скрипт работает с: --env = прод

Так что я сделал меньший тест:

 // taken from my symfony test command 
     $logger = $this->getContainer()->get('logger'); 

     while (true){ 
      $logger->debug("line one"); 
      $logger->debug("line two"); 
      $logger->debug("line three"); 
      var_dump($logger); 
     } 

Это содержание var_dump после ~ 10к итераций:

class Symfony\Bridge\Monolog\Logger#3 (3) { 
    protected $name => 
    string(3) "app" 
    protected $handlers => 
    array(1) { 
    [0] => 
    class Monolog\Handler\FingersCrossedHandler#132 (11) { 
     protected $handler => 
     class Monolog\Handler\StreamHandler#133 (9) { 
     ... 
     } 
     protected $activationStrategy => 
     class Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy#134 (1) { 
     ... 
     } 
     protected $buffering => 
     bool(true) 
     protected $bufferSize => 
     int(0) 
     protected $buffer => 
     array(100) { 
     ... 
     } 
     protected $stopBuffering => 
     bool(true) 
     protected $passthruLevel => 
     NULL 
     protected $level => 
     int(100) 
     protected $bubble => 
     bool(true) 
     protected $formatter => 
     NULL 
     protected $processors => 
     array(0) { 
     ... 
     } 
    } 
    } 
    protected $processors => 
    array(0) { 
    } 
} 

Монолог комплекта связок:

monolog: 
    handlers: 
     main: 
      type:   fingers_crossed 
      action_level: error 
      handler:  nested 
      buffer_size: 100 
     nested: 
      type: stream 
      path: "%kernel.logs_dir%/%kernel.environment%.log" 
      level: debug 
      buffer_size: 100 


framework: 
    profiler: 
     only_exceptions: false 
     enabled: false 
     collect: false 

Записи журнала в буфере не превышают buffer_limit, но использование сценария по-прежнему увеличивается.

Любые идеи? Спасибо

PS: Я повторил тест с простым монологом, и не было проблемы с памятью.

+0

У меня есть вопрос о buffer_size, что это число означает? означает ли это размер буферизованного журнала или количество строк? благодаря – user2810081

ответ

1

Это fingers_crossed Ожидаемое поведение. Он сохраняет записи журнала в памяти до тех пор, пока не произойдет событие action_level. Измените его на stream или какой-либо другой обработчик без буферизации.

Смежные вопросы