允许的内存大小 134217728 字节用尽(尝试分配 1052672 字节)

Posted

技术标签:

【中文标题】允许的内存大小 134217728 字节用尽(尝试分配 1052672 字节)【英文标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 1052672 bytes) 【发布时间】:2021-12-29 16:36:09 【问题描述】:

我已经检查过这个问题,但没有找到适合我需要的解决方案。

我为州、城市和地区创建了表格,其中有 37、7431 和 91853 条记录可用。

当我使用 create 而不是在播种器中使用 insert 时,花费的时间更长。

所以,我通过将 create 替换为 insert 来更改我的代码。然后通过Laravel Daily视频了解了chunk。

Chunk 在 CitySeeder 中运行良好,但在 LocalitySeeder 中出现问题。

这是我的 Seeder 中的代码:

    <?php
    
    namespace Database\Seeders;
    
    use App\Models\Locality;
    use Illuminate\Database\Seeder;
    
    class LocalitySeeder extends Seeder
    
        public function run()
        
            $input = [
                [ 'name' => 'Adilabad', 'city_id' => 5487, 'created_at' => now()->toDateTimeString(), 'updated_at' => now()->toDateTimeString() ],
.
.
.
.
.
.
.
.
                [ 'name' => 'Nalgonda', 'city_id' => 5476, 'created_at' => now()->toDateTimeString(), 'updated_at' => now()->toDateTimeString() ],];
    $chunks = array_chunk($input, 5000, true);
            foreach ($chunks as $key => $data) 
                Locality::insert($data);
            
        
    

错误图像

使用创建的工作图像

提前致谢。

【问题讨论】:

【参考方案1】:

您正在尝试加载一个包含接近 92K 条目的数组 ($input),然后将其复制到带有 array_chunk 的分块数组中。您已配置(或在安装期间设置)的内存限制不允许您使用这么多 RAM。正如 Daniel 指出的那样,解决此问题的一种方法是增加内存限制,但另一种方法可能是从种子文件中读取这些数据。我将在下面尝试说明这一点,但您可能需要稍作调整。

localities.json 中,注意每一行都是一个单独的 JSON 对象

"name": "Adilabad", "city_id": 5487
[...]
"name": "Nalgonda", "city_id": 5476

然后在seeder类中,可以实现run方法如下:

$now = now()->toDateTimeString();
$handle = fopen(__DIR__."/localities.json");
while(($line = fgets($handle)) !== FALSE)
  $data = json_decode($line, TRUE);
  $data["created_at"] = $now;
  $data["updated_at"] = $now;
  Locality::insert($data);


编辑:关于这将花费的时间,这么多数据总是会很慢,但是播种机并不意味着要经常运行。

【讨论】:

感谢您的评论,我会检查一下。如果有任何问题,我会告诉你的。

以上是关于允许的内存大小 134217728 字节用尽(尝试分配 1052672 字节)的主要内容,如果未能解决你的问题,请参考以下文章

允许的内存大小 134217728 字节用尽(尝试分配 1052672 字节)

允许的内存大小为 134217728 字节已用尽(尝试分配 42 字节)[关闭]

php - 致命错误:允许的内存大小为 134217728 字节已用尽 [重复]

PHP致命错误:允许的内存大小为134217728字节已用尽

图像迁移脚本 - 允许的 134217728 字节内存大小已用尽 [重复]

致命错误:PHPExcel 中已用尽的允许内存大小为 134217728 字节