Php laravel内存限制错误

标签 php mysql laravel transactions out-of-memory

我目前正在从一个数据库迁移到另一个数据库,项目在 laravel 上,所以我正在为此创建 laravel 命令。我有一张大约有 700000 条记录的表。我已经使用 LIMIT 和事务创建了函数来优化查询,但仍然从 PHP 中获取内存不足错误。 这是我的代码:

ini_set('memory_limit', '750M');  // at beginning of file

$circuit_c = DB::connection('legacy')->select('SELECT COUNT(*) FROM tbl_info');
$count = (array) $circuit_c[0];
$counc = $count['COUNT(*)'];
$max =  1000;
$pages = ceil($counc / $max);

    for ($i = 1; $i < ($pages + 1); $i++) {
        $offset = (($i - 1) * $max);
        $start = ($offset == 0 ? 0 : ($offset + 1));
        $infos = DB::connection('legacy')->select('SELECT * from tbl_info LIMIT ' . $offset . ', ' . $max);
        DB::connection('mysql')->transaction(function() use ($infos) {
            foreach ($infos as $info) {
                $validator = Validator::make($data = (array) $info, Info::$rules);
                if ($validator->passes()) {
                    if ($info->record_type == 'C') {
                        $b_user_new = Info::create($data);
                        unset($b_user_new);

                    }
                }
                unset($info);
                unset($validator);
            }
        });
        unset($infos);
    }

错误是这样的:

user@lenovo /var/www/info $ php artisan migratedata
PHP Fatal error:  Allowed memory size of 786432000 bytes exhausted (tried to allocate 32 bytes) in /var/www/info/vendor/laravel/framework/src/Illuminate/Database/Grammar.php on line 75

导入大约50000条记录后出现错误。

最佳答案

这里有点“内存泄漏”。您需要找出哪些变量占用了所有这些内存。试试这个函数来调试,看看哪个变量在不断增长

function sizeofvar($var) {
  $start_memory = memory_get_usage();
  $tmp = unserialize(serialize($var));
  return memory_get_usage() - $start_memory;
}

一旦您知道哪个变量占用了所有内存,您就可以开始实现适当的措施。

关于Php laravel内存限制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29875730/

相关文章:

php - 安装 php 5.2 ubuntu

php - 如何使用 Plesk 在我的网络服务器上禁用 https?

php - 在 double 上调用成员函数 first()

mysql - 如何使用 SELECT 列相对于父表的子查询进行更新?

php - 端口转发正常但无法访问数据

mysql - 具有潜在 NULL 或空值的条件 CONCAT

mySQL 触发器,记录从特殊访问表中的表访问数据的时间和内容

php - Laravel - 自定义请求中的关联数组验证

laravel - Redis 连接到 127.0.0.1 :6379 failed - connect ECONNREFUSED In laravel

laravel - 如何使用 Redis TLS 配置 Laravel 5.7(使用 phpredis)