MonologBundle内存泄漏(?)
MonologBundle memory leak (?)
我在 Symfony2(兔子消费者)中有一个很长的 运行 进程,我正在使用 MonologBundle 进行日志记录。这些行会立即记录下来,但我注意到该进程的内存消耗随着每次迭代而增加,几分钟后达到超过 1GB。
脚本运行:--env=prod
所以我做了一个小测试:
// 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);
}
这是经过 ~10k 次迭代后的 var_dump 内容:
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 包设置:
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:我用纯独白重复了测试,没有内存问题。
这是 fingers_crossed
预期的行为。它将日志条目存储在内存中,直到 action_level
事件发生。将其更改为 stream
或其他一些非缓冲处理程序。
您还可以使用 "buffer_size" 限制存储的日志量。参见:
http://symfony.com/doc/current/reference/configuration/monolog.html
我在 Symfony2(兔子消费者)中有一个很长的 运行 进程,我正在使用 MonologBundle 进行日志记录。这些行会立即记录下来,但我注意到该进程的内存消耗随着每次迭代而增加,几分钟后达到超过 1GB。
脚本运行:--env=prod
所以我做了一个小测试:
// 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);
}
这是经过 ~10k 次迭代后的 var_dump 内容:
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 包设置:
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:我用纯独白重复了测试,没有内存问题。
这是 fingers_crossed
预期的行为。它将日志条目存储在内存中,直到 action_level
事件发生。将其更改为 stream
或其他一些非缓冲处理程序。
您还可以使用 "buffer_size" 限制存储的日志量。参见:
http://symfony.com/doc/current/reference/configuration/monolog.html