为什么 TP6.0 命令行脚本吃光内存?看我如何优化大数据循环【排错】

夏辰大大_6069

夏辰大大_6069

2026-07-17

686人浏览

原创

Composer create-project OOM根本原因是PHP CLI默认128MB内存限制,而TP6依赖求解需超1GB;须用php -d "memory_limit=-1"或"2G"临时提升,并清理vendor与composer.lock、加--no-dev优化。

为什么 tp6.0 命令行脚本吃光内存?看我如何优化大数据循环【排错】

Composer create-project 时直接 OOM,不是 TP6 的锅

根本原因不是 ThinkPHP 6.0 本身内存高,而是 composer create-project 在解析依赖树阶段就崩了——PHP CLI 默认 memory_limit=128M,而 TP6 的 dev 依赖(phpunit、symfony/var-dumper、psr/log 等)让 Composer 求解过程峰值轻松突破 1GB。

你甚至没机会执行任何 TP6 代码,进程就在依赖锁定环节被系统 kill。验证方法很简单:

  • 在 PowerShell 中运行 php -i | findstr "memory_limit"(必须用 PowerShell,CMD 会漏结果)
  • 如果输出是 memory_limit => 128M 或 256M,这就是瓶颈
  • 别急着改 php.ini,先临时绕过:用 php -d "memory_limit=-1" 启动命令

加 -d 参数时双引号不能省,PowerShell 会吃掉 -1

在 Windows 上直接敲 php -d memory_limit=-1 composer create-project ... 是无效的——PowerShell 把 -1 当作命令选项而非字符串值,参数被截断,命令静默失败,你根本收不到报错,只看到安装卡死或空目录。

正确写法只有两种:

  • php -d "memory_limit=-1" composer create-project topthink/think tp6
  • php -d "memory_limit=2G" composer create-project topthink/think tp6

注意:2G 单位必须大写,小写 g 会被 PHP 忽略;-1 表示无限制,但仅限 CLI 场景,不建议长期用于生产脚本。

vendor 和 composer.lock 残留会让问题更糟

如果你是从旧项目复制过来的骨架,或者上次安装中断留下 vendor/ 和 composer.lock,Composer 不会重新求解,而是试图“兼容还原”,这比全新安装更耗内存、更容易触发回溯爆炸。

人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)
人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)

这是一款人工智能数字技术机器人全息大脑大数据分析矢量素材,格式为 EPS,含 JPG 预览图。

下载

每次重试前务必手动清理:

  • 删掉整个 vendor/ 目录
  • 删掉 composer.lock
  • 如果只是想跑 demo,加 --no-dev:它能砍掉约一半内存峰值,因为跳过所有 dev-only 依赖

命令组合示例:php -d "memory_limit=-1" composer create-project topthink/think tp6 --no-dev

TP6 自身循环处理大数据时,内存不降≠代码没写好

一旦 TP6 装好,你在控制器里写个 foreach 处理十万条数据库记录,发现 memory_get_usage() 居高不下,别急着怀疑框架——PHP 垃圾回收对循环引用无效,常见陷阱包括:

  • $model->relation = $parent + $parent->children[] = $model 形成闭环,unset() 不释放
  • PDO 查询后没调 $stmt->closeCursor(),结果集缓存一直占着内存
  • 文件句柄没关 fclose($fp),底层缓冲区滞留
  • 生成器 yield 写对了,但你在 foreach 外还存着生成器实例引用,整个上下文卡住不释放

真正该盯的是 memory_get_peak_usage(true),而不是看当前占用。峰值飙高才说明逻辑有坑,常量级波动只是 GC 滞后而已。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

thinkphp 大数据

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

5736

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1249

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

243

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

526

22

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

40

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

20

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

40

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

80

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程