memory_get_usage(true) 返回系统实际分配的内存字节数(按页对齐,更准确),microtime(true) 记录起止时间可计算毫秒级耗时;二者组合能精准监控脚本单次执行的内存增量与耗时,无需额外扩展。

直接在脚本中用 memory_get_usage(true) 和 microtime(true) 就能拿到当前内存占用和执行时间,不需要额外扩展或配置。
获取当前内存使用量(准确值)
用 memory_get_usage(true) 获取真实分配的内存字节数。加 true 参数很重要——它会返回按 1MB 对齐的实际内存块大小,而不是 PHP 内部估算值,避免低估。
-
memory_get_usage()不带参数:只统计 PHP 用户区已分配但未释放的内存,不含底层缓存、扩展分配等,容易偏低 -
memory_get_usage(true)带 true:返回实际向系统申请的内存页大小,更贴近真实开销 - 别用
memory_get_peak_usage()判断单次脚本消耗——它是整个进程生命周期内的峰值,不是本次执行的增量
计算脚本执行耗时(毫秒级精度)
用 microtime(true) 记录起止时间,相减即得秒数,乘以 1000 可转为毫秒:
- 开始:
$start = microtime(true); - 中间执行业务逻辑(比如 DB 查询、文件处理、API 调用)
- 结束:
$duration = round((microtime(true) - $start) * 1000, 2); // 单位:毫秒 - 注意:CLI 环境下受系统负载、I/O 阻塞影响较大,多次运行取平均值更可靠
组合使用示例(日志记录场景)
适合放在控制器方法、命令行指令或队列任务的 handle() 中,用于快速定位高耗时/高内存操作:
$start = microtime(true);$memBefore = memory_get_usage(true);- // 执行你的核心逻辑
$memAfter = memory_get_usage(true);$duration = round((microtime(true) - $start) * 1000, 2);$delta = $memAfter - $memBefore;Log::debug('script-profile', ['ms' => $duration, 'mem_kb' => (int)round($delta / 1024)]);
补充说明:什么时候该看“峰值”?
如果你怀疑有内存泄漏或瞬时尖峰(如解压大文件、解析超长 JSON),可在关键节点多次采样:
- 读取文件后、解压前、解压后、JSON 解析完成时各调一次
memory_get_usage(true) - 对比相邻差值,识别哪一步骤造成突增
- 单纯看开头和结尾的差值,可能掩盖中间短暂但致命的峰值


















