必须使用PHP内建函数与系统级手段量化内存消耗:一、memory_get_usage()测当前占用;二、memory_get_peak_usage()查历史峰值;三、ini_get('memory_limit')解析配置阈值;四、register_shutdown_function捕获溢出临界点;五、shell_exec读/proc/meminfo获系统级快照。

如果您需要量化PHP脚本在运行过程中实际消耗的内存资源,则必须依赖PHP内建的内存度量函数与系统级辅助手段。以下是获取脚本执行内存用量的具体方法:
一、使用memory_get_usage()获取当前内存占用量
该函数返回脚本执行到当前位置时已分配给PHP堆的内存量(单位为字节),反映的是当前活跃变量与结构所占空间,不包含未释放的Zend内存管理器开销,适用于实时观测内存增长点。
1、在脚本起始位置调用memory_get_usage()并保存初始值:$start = memory_get_usage();
2、在待测代码段执行完毕后再次调用该函数:$end = memory_get_usage();
立即学习“PHP免费学习笔记(深入)”;
3、计算差值并转换为MB单位:$used = round(($end - $start) / 1024 / 1024, 2);
4、输出结果示例:echo $used . ' 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) 返回值比默认调用更严格,且不可被unset()操作降低。
三、结合ini_get('memory_limit')解析当前内存限制阈值
仅知实际用量不足以判断是否接近危险边界,必须同步获取PHP配置中设定的最大可用内存限额,才能评估相对压力水平。
1、通过ini_get('memory_limit')获取原始配置字符串,如'128M'或'2G';
2、将字符串解析为字节数:需识别末尾单位K/M/G,并按1024进制换算;
3、若返回值为'-1',表示内存限制已被禁用,脚本可无约束增长;
4、示例转换逻辑:'128M' → 128 × 1024 × 1024 = 134217728 字节。
四、通过register_shutdown_function捕获内存溢出临界点
该方法不直接测量用量,而是通过触发PHP内存耗尽错误来反向验证脚本在特定限制下的行为边界,适用于压力测试场景。
1、在CLI环境下执行脚本时强制设定低限:php -d memory_limit=4M script.php;
2、在脚本开头注册关闭回调函数:register_shutdown_function(function () { ... });
3、在回调中检查error_get_last()是否返回'Allowed memory size exhausted'错误信息;
4、若捕获成功,说明脚本在4MB限制下已发生实际溢出,需定位高耗内存模块。
五、使用shell_exec读取/proc/meminfo获取系统级内存快照
当需区分PHP脚本内存与整个进程或系统内存状态时,可绕过PHP函数层,直接读取Linux内核暴露的内存统计文件,获得更底层视角。
1、执行命令获取系统总内存与空闲内存:$meminfo = file_get_contents('/proc/meminfo');
2、按行分割并匹配MemTotal和MemFree字段:$lines = explode("\n", $meminfo);
3、提取数值部分并去除单位与空格:$total = (int)str_replace(['kB', ' '], '', $line_total_value);
4、计算PHP进程占比:$php_usage_bytes = memory_get_usage(); $system_total_bytes = $total * 1024; 占比 = round($php_usage_bytes / $system_total_bytes * 100, 2)。



















