pdo/mysqli内存泄漏

xxls0lw8  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(479)

我在使用pdo或mysqli执行许多(20000)简单的select操作时发生内存泄漏。

// test2.php
$i = 0;
while (true) {

    $pdo->query("SELECT 1 as m");
    file_put_contents(__FILE__ . '.log', 'Memory: ' . memory_get_usage_in_mb() . PHP_EOL, FILE_APPEND);
    // In test2.php.log
    // ([line]: [message]):
    // 1:     Memory: 0.39
    // 5000:  Memory: 0.44
    // 10000: Memory: 0.51
    // 20000: Memory: 0.63

    if ($i === 20000) {
        break;
    }
    $i++;
}

请参阅完整的测试代码https://gist.github.com/newexe/ca4f5ddbeb7ff863b8c775c238698c57
我也试过了 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false$pdo::closeCursor 每次查询后调用此代码 mysqli 案例:

$result = $mysqli->query("SELECT 1 as m", MYSQLI_USE_RESULT); // and MYSQLI_STORE_RESULT too...

// with and without this lines:
$result->free_result();
$result = null;
unset($result);

服务器:nginx/1.13.6
php:7.2.7-1+ubuntu16.04.1+deb.sury.org+1
mysql:5.7.21-0ubuntu0.16.04.1
pdo_mysql:客户端api版本-mysqlnd 5.0.12-dev-20150407
mysqli:客户端api库版本-mysqlnd 5.0.12-dev-20150407
对不起我的英语,提前谢谢你!

9vw9lbht

9vw9lbht1#

我禁用了xdebug,问题就解决了!
我想回答这个问题:https://stackoverflow.com/a/43359644/8927920

mzmfm0qo

mzmfm0qo2#

紧接着

$pdo = new \PDO($dsn, $dbParams['username'], $dbParams['password']);

添加此

$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

对两个文件进行测试

相关问题