Laravel 10导入igaster/laravel_cities时内存耗尽问题求助
问题原因及修复方案
问题原因
错误出在Laravel Telescope的IncomingEntry.php第79行,核心原因是Telescope会在控制台命令执行期间,实时记录所有操作的详细日志(包括每一次数据库查询、模型创建/更新动作)。虽然你导入的UA.txt仅6.8MiB,但geo:seed命令会循环创建大量地理数据模型实例,Telescope会把这些操作的日志数据全部暂存到内存中,随着任务推进,内存占用持续累积,最终触发内存耗尽错误——哪怕你设置了很高的CLI内存限制,也架不住日志数据的无节制堆积。
修复方案
1. 临时禁用Telescope执行该命令
最简单直接的方法是在执行geo:seed时,通过环境变量临时关闭Telescope:
TELESCOPE_DISABLE=true php -d memory_limit=6500M artisan geo:seed UA --append --chunk=10
这个方法不会影响Telescope的日常使用,只是临时跳过当前命令的日志记录。
2. 让Telescope永久忽略geo:seed命令
如果需要频繁执行该命令,可以修改Telescope的配置文件config/telescope.php,在ignore_commands数组中添加该命令:
'ignore_commands' => [ // 已有的忽略命令 'geo:seed', ],
配置生效后,Telescope会自动跳过该命令的日志记录,从根源避免内存溢出问题。
3. 优化Telescope日志存储策略(辅助方案)
如果不想完全禁用该命令的日志,可以调整Telescope的日志存储规则,比如限制单条命令日志的大小:
在config/telescope.php的entries配置中修改command的记录策略:
'entries' => [ 'command' => [ 'enabled' => true, 'size_limit' => 1024 * 1024, // 限制单条命令日志大小为1MB ], // 其他日志类型配置 ],
不过这个方法属于辅助优化,核心解决手段还是前两种。
4. 进一步降低chunk参数(辅助方案)
你已经使用了--chunk=10,可以尝试调至更小值(比如--chunk=5),减少每次批量处理的数据量,间接降低Telescope单次记录的日志数据规模。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

