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

CentOS7 LAMP环境Apache不释放内存频繁触发OOM排查咨询

排查方法与操作步骤

前置验证(10分钟可出结论)

你当前用的是MPM Worker模式+PHP-FPM架构,正常逻辑下PHP代码的内存消耗应该算在php-fpm进程头上,Apache本身内存占用过高首先排查两个基础配置:

  • 检查是否安装了mod_php:执行httpd -M | grep php如果有输出,说明你同时加载了mod_php,PHP代码的内存泄漏会直接算入Apache进程的内存占用,这是最常见的同配置机器唯独这台出问题的原因(只有这台跑的TYPO3爬虫代码存在内存泄漏)。
  • 检查Apache MPM Worker的回收参数:查看/etc/httpd/conf/httpd.conf中的MaxConnectionsPerChild(旧版本叫MaxRequestsPerChild)配置,如果该值为0,代表Apache子进程永远不回收,只要发生一次内存泄漏就会持续占用内存不会释放。你可以先将该值改为1000~5000,无需修改业务代码即可大幅缓解OOM问题。

导出Apache进程数据定位根因

你完全可以通过导出进程数据定位内存占用原因,操作步骤如下:

  1. 导出进程core dump文件分析内存内容
    首先安装依赖包:
yum install gdb httpd-debuginfo -y

选择内存占用最高的httpd进程PID(比如你示例中的10914),导出内存快照:

gdb -p 10914 -ex "generate-core-file /tmp/httpd-core.10914" -ex quit

导出的core文件中可以直接查看到进程加载的所有模块、执行栈信息,如果加载了mod_php,还能看到对应执行的PHP代码片段,可直接确认是否为TYPO3代码导致的内存泄漏。
2. 通过mod_status获取请求对应关系
开启Apache的mod_status模块,配置允许本地访问/server-status路径,访问该页面可以看到每个Apache子进程处理过的请求数量、最近处理的请求URL,只要占内存高的进程都处理过TYPO3爬虫相关的请求,即可作为指向TYPO3问题的直接证据。
3. 对照验证
临时修改Apache配置,暂停TYPO3站点的对外访问,观察1~2天如果Apache内存不再持续上涨,即可100%确认问题出在TYPO3侧。

临时缓解方案

在根因修复前,你可以配置每天低峰期执行systemctl reload httpd(graceful重启,不会中断正在处理的请求)释放内存,避免触发OOM影响业务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:04