准确获取PHP脚本内存使用情况需综合五种方法:一、memory_get_usage()测当前用量;二、memory_get_peak_usage()查峰值;三、Xdebug生成内存快照定位泄漏源;四、CLI设memory_limit捕获溢出;五、getrusage()交叉验证系统级内存。

如果您在运行PHP脚本时怀疑存在内存泄漏或资源消耗异常,则需要准确获取当前脚本的内存使用情况。以下是几种直接、可复现的内存占用测试方法:
一、使用memory_get_usage()获取当前内存使用量
该函数返回脚本执行到当前位置所分配的内存量(单位为字节),不包含PHP内部结构开销,适用于粗粒度监控。
1、在脚本开头调用memory_get_usage()并保存初始值。
2、在待测代码段执行前后分别调用该函数,计算差值。
立即学习“PHP免费学习笔记(深入)”;
3、将结果除以1024再除以1024,转换为MB单位以便阅读。
4、输出格式示例:echo round((memory_get_usage() - $start) / 1024 / 1024, 2) . ' MB';
二、使用memory_get_peak_usage()获取峰值内存占用
该函数返回脚本执行至今所达到的最高内存使用量,能反映整个生命周期中的最大压力点,适合评估脚本整体内存上限。
1、在脚本最开始处记录初始峰值:$peak_start = memory_get_peak_usage();
2、在脚本结束前再次调用memory_get_peak_usage(true),传入true参数表示获取包括未释放的Zend内存管理器分配的总量。
3、对比两次调用结果,确认是否出现非预期增长。
4、关键提示:memory_get_peak_usage(true) 返回的是系统级实际分配量,比默认调用更严格。
三、结合xdebug进行内存快照分析
启用Xdebug扩展后,可通过其提供的内存分析功能生成堆内存快照,定位具体变量或对象的内存消耗来源。
1、确保php.ini中已启用xdebug.mode=develop,profile,debug并重启Web服务器或CLI环境。
2、在目标脚本中插入xdebug_memory_usage();或调用xdebug_dump_function_profile(1);触发采集。
3、设置xdebug.output_dir指向可写目录,生成mem_*.xmf文件。
4、使用xdebug-analyze命令行工具或KCacheGrind打开快照文件查看详细分配树。
四、通过CLI参数限制并捕获内存超限行为
在命令行环境下运行PHP脚本时,可强制设定内存上限,并结合错误日志判断是否触及阈值,从而反向验证内存增长趋势。
1、执行命令:php -d memory_limit=8M script.php,将限制设为8MB。
2、在脚本中插入register_shutdown_function()回调,检查error_get_last()是否为Allowed memory size exhausted。
3、若捕获到该错误,说明脚本在限定范围内已发生溢出,需进一步缩小测试范围。
4、重要提醒:此方法仅适用于CLI模式,Web服务器环境受php-fpm或Apache配置影响,不可直接复用。
五、使用getrusage()获取进程级内存统计
该函数调用操作系统底层接口,返回当前PHP进程的资源使用数据,其中ru_maxrss字段表示进程生命周期内的最大常驻内存集大小(KB),与memory_get_peak_usage()形成交叉验证。
1、在脚本起始位置调用$start_rusage = getrusage();
2、在关键节点或结尾处再次调用$end_rusage = getrusage();
3、提取$end_rusage['ru_maxrss'] - $start_rusage['ru_maxrss']获得增量。
4、注意平台差异:Linux下单位为KB,macOS下单位为字节,需根据PHP_OS_FAMILY动态适配。











