php 8.3 在 k8s 中内存不释放主因是进程长期复用+配置错配:opcache 占用固定共享内存、pm.max_requests=0 导致 rss 持续累积、jit 默认启用额外耗内存,需设 pm.max_requests=500、pm.process_idle_timeout=10s、opcache.jit_buffer_size=0 并配合 tcpsocket 健康探针。

PHP 8.3 在 Kubernetes 中内存不释放,通常不是 PHP 自身“忘了释放”,而是容器进程长期运行 + 内存管理机制错配导致的假性泄漏。关键要区分:是 PHP-FPM Worker 进程真实内存增长,还是 cgroup 统计偏差、OPcache 占用、或未触发优雅回收。
为什么 PHP-FPM 在 K8s 里看起来“内存不释放”
PHP-FPM 默认启用动态子进程管理(pm = dynamic),Worker 进程会复用、缓存 OPcache 和扩展对象;K8s Pod 生命周期长,没有传统重启机制,导致 RSS 持续爬升。更隐蔽的是:memory.usage_in_bytes 包含 kmem(内核内存)和 page cache,这些不会被 unset() 或 gc_collect_cycles() 清掉,但也不代表泄露。
- OPcache 启用后,默认占用固定共享内存段(
opcache.memory_consumption),这部分在进程生命周期内不释放 - PHP 8.3 的 GC 改进对循环引用更友好,但无法回收已分配但仍在作用域内的大数组或对象图
- K8s 的
livenessProbe若只走 HTTP 而非tcpSocket:9000,可能让僵死 Worker 逃过探测,继续占内存
必须调整的 PHP-FPM 配置项
不要只改 pm.max_children —— 那只是限制并发数,不解决单个 Worker 内存累积。重点调以下三项:
-
pm.max_requests = 500:强制 Worker 处理完 500 个请求后退出并由 master 重建,是最直接的内存重置手段(值不宜过大,否则积累明显;也不宜过小,引发频繁 fork 开销) -
pm.process_idle_timeout = 10s:空闲 Worker 超时即销毁,避免低流量下长期驻留 -
opcache.enable_cli = 0(确保关闭 CLI 模式 OPcache,防止测试脚本污染)
把这些写进 www.conf 并 COPY 到镜像:COPY www.conf /usr/local/etc/php-fpm.d/www.conf。
Pod 层级配合:资源限制 + 探针 + 优雅终止
K8s 不会主动杀“胖”进程,得靠配置驱动回收:
- 给容器设紧一点的
resources.limits.memory,比如512Mi;一旦超限,OOMKilled 触发,强制重建 Pod(这是兜底,不是首选) -
livenessProbe必须用tcpSocket直连 PHP-FPM 端口(port: 9000),而非 HTTP —— 因为 HTTP 健康检查可能成功,但 FPM 子进程已卡死、RSS 溢出 - 加
terminationGracePeriodSeconds: 30和preStophook,例如:lifecycle:<br> preStop:<br> exec:<br> command: ["/bin/sh", "-c", "kill -QUIT 1"]
让 FPM master 收到信号后,等待 Worker 处理完当前请求再退出
验证是否真泄漏:别只看 kubectl top
kubectl top pod 显示的是 cgroup memory.usage_in_bytes,含 page cache 和 kmem。要定位真实用户态堆内存增长,进容器执行:
php -r "echo memory_get_peak_usage(true) / 1024 / 1024 . " MiB\n";"
再结合 cat /sys/fs/cgroup/memory/kubepods/.../memory.stat | grep -E "(rss|cache|kmem)" 对比。如果 total_rss 持续上涨而 total_cache 稳定,才是代码层问题;否则大概率是配置或统计口径导致的“虚高”。
最易被忽略的一点:PHP 8.3 的 opcache.jit_buffer_size 默认启用 JIT,若未显式设为 0,会在每个 Worker 进程里额外分配几 MB 内存且不释放 —— 生产环境建议关掉 JIT,除非你真做了压测证明它带来收益。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











