PHP运行时如何获取当前脚本允许的最大内存占用字节数
PHP获取内存上限原始字节数方案
高版本PHP(8.2及以上)方案
直接使用PHP内置的ini_get_int()函数,无需自行处理单位解析,会直接返回转换后的整数字节数:
// 直接返回内存上限对应的字节数,比如设置128M时返回134217728 $maxMemoryBytes = ini_get_int('memory_limit');
如果返回值为-1,代表当前脚本没有设置内存上限。
低版本PHP(8.2以下)兼容方案
不需要自己从零编写单位解析器,利用PHP内置的字符串处理能力即可完成转换,覆盖K/M/G所有官方支持的单位场景:
$memoryLimitStr = ini_get('memory_limit'); if ($memoryLimitStr === '-1') { $maxMemoryBytes = -1; // 无内存限制 } else { $unit = strtoupper(substr($memoryLimitStr, -1)); $value = (int)substr($memoryLimitStr, 0, -1); $maxMemoryBytes = match ($unit) { 'K' => $value * 1024, 'M' => $value * 1024 * 1024, 'G' => $value * 1024 * 1024 * 1024, default => (int)$memoryLimitStr }; }
适配监控场景用法
搭配memory_get_usage(true)获取当前脚本实际占用的系统内存字节数,和上面拿到的上限值对比即可实现阈值告警,示例逻辑如下:
// 内存使用率到达90%时触发告警 $warnThreshold = 0.9; $currentUsage = memory_get_usage(true); if ($maxMemoryBytes !== -1 && $currentUsage / $maxMemoryBytes >= $warnThreshold) { // 执行你的告警通知逻辑 }
内容的提问来源于stack exchange,提问作者user17535142
相关产品推荐
相关产品推荐

