У меня утечка памяти при выполнении многих (20 000) простых операций SELECT с использованием PDO или mysqli.
// 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
case:
$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
Извините за мой английский и заранее благодарю вас!