我在使用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
对不起我的英语,提前谢谢你!
2条答案
按热度按时间9vw9lbht1#
我禁用了xdebug,问题就解决了!
我想回答这个问题:https://stackoverflow.com/a/43359644/8927920
mzmfm0qo2#
紧接着
添加此
对两个文件进行测试