允许的内存大小 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字节已用尽