相机原图 8000×6000 上传后裁剪接口返回 502,服务日志里是 Cannot allocate memory,小图都正常。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,解码后一张图占两百多 MB,并发四个就把容器内存打满,进程被内核杀掉,网关看到的就是 502。容器内存上限只给了 512MB。
碰到「裁剪服务 502」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。
convert big.jpg -resize '4000x4000>' -quality 88 big-small.jpg identify -format '%wx%h\n' big-small.jpg
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,上传阶段先把长边压到 4000 像素以内,再进裁剪队列;给图像处理设内存上限,超限返回明确错误码;把并发降到 2,或按图片大小做队列分级。
最后用这个标准收尾,八千像素原图能生成缩略图,服务内存曲线不再顶到上限。
