You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP memory_get_peak_usage未统计GD库内存使用的问题求助

PHP GD库imagecreatefromjpeg()内存占用未被memory_get_peak_usage统计的问题

环境信息

  • 服务器系统:Debian 12
  • Web服务组合:Nginx/1.26.2 + PHP-FPM 8.2.26(CLI版本一致),Zend Engine v4.2.26
  • 已安装扩展:php-gd

问题现象

使用imagecreatefromjpeg()加载高分辨率图片时,PHP进程实际内存占用超过300M,但memory_get_peak_usage(true)仅返回2M左右的数据,导致php.ini中设置的memory_limit完全起不到限制作用。当实际内存耗尽时,PHP-FPM进程会被系统直接终止。

在另一台Apache+PHP 8.3.14(php83-cgi,Zend Engine v4.3.14)的服务器上测试相同代码,memory_get_peak_usage()能正确统计到300M+的内存占用;即使将问题服务器升级到PHP 8.3.15,该问题依然存在。

测试代码

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$file="/var/www/html/test2.jpg";
$src_img=imagecreatefromjpeg($file); // 此操作占用的300M+内存未被统计

print 'Memory usage: '. round(memory_get_peak_usage(true)/(1024*1024)) . 'M<br />'; // 返回结果约2M

复现步骤

  1. 安装全新Debian 12系统
  2. 部署Nginx、官方PHP包及php-gd扩展
  3. 将一张高分辨率图片(加载后会占用300M+内存)放置在/var/www/html/test2.jpg路径下
  4. 执行命令sudo php /var/www/html/test.php,输出仅显示约2M内存占用,但通过top命令查看,PHP进程实际内存占用超过300M

风险与临时解决方案

  • 严重风险:若用户上传高分辨率但文件体积小的图片,PHP进程可能占用3G+内存,直接导致服务崩溃
  • 临时方案:先调用getimagesize()获取图片分辨率,根据分辨率预估内存占用后,再决定是否调用GD库进行处理

求助

希望有相关经验的开发者提供彻底解决该问题的方案,感谢支持!

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:30:54