php-fpm内存溢出

本文介绍了一种通过命令行工具监测 PHP-FPM 进程资源消耗的方法,具体展示了如何利用 ps、awk 等工具获取平均内存使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

这里写图片描述

$ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
117M
<think>我们正在解决php-fpm.service启动失败的问题,错误信息是"failed to start with status 203/EXEC and message No such file or directory" 这个错误通常意味着在systemd服务的ExecStart指令中指定的可执行文件路径不存在,或者执行权限有问题。 根据之前的上下文,我们已经尝试过创建或复制服务单元文件,现在出现的是执行文件路径错误。 解决步骤: 1. 检查php-fpm.service文件中ExecStart指定的路径是否正确。 2. 确认该路径下是否存在php-fpm可执行文件。 3. 检查该文件的执行权限。 4. 如果路径错误,修改服务文件并重新加载systemd。 具体操作: 步骤1:查看当前的php-fpm.service文件内容 使用命令:`sudo cat /usr/lib/systemd/system/php-fpm.service`(如果该文件在/etc/systemd/system下,则用相应路径) 步骤2:检查ExecStart行中的路径 例如,ExecStart可能是这样的:`ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf` 我们需要确认路径`/usr/local/php/sbin/php-fpm`是否存在。 步骤3:如果路径不存在,我们需要找到正确的php-fpm路径 可以使用`which php-fpm`或`whereis php-fpm`来查找,或者使用`find`命令: `sudo find / -name php-fpm 2>/dev/null` 步骤4:如果找到正确的路径,修改服务文件中的ExecStart行 使用文本编辑器(如vim)打开服务文件,修改ExecStart行为正确的路径。 步骤5:检查文件权限 确保php-fpm可执行文件有执行权限,使用命令: `sudo chmod +x /path/to/php-fpm` 步骤6:重新加载systemd配置并启动服务 `sudo systemctl daemon-reload` `sudo systemctl start php-fpm` 步骤7:检查状态 `sudo systemctl status php-fpm` 如果步骤3中找不到php-fpm,则可能没有安装php-fpm,需要安装。 注意:如果之前是通过源码安装的,可能没有将php-fpm安装到系统路径,需要重新安装或者将可执行文件复制到合适的位置。 另外,如果服务文件中的路径包含变量(例如${prefix}),则可能需要修改为绝对路径。 根据引用[1]中提到的错误,虽然与当前问题不直接相关,但提醒我们注意权限问题,确保php-fpm运行用户有权限写入session等目录。 下面我们按步骤详细说明:</think>### 解决 PHP-FPM 启动失败(状态 203/EXEC)问题 错误 `status 203/EXEC` 和 `No such file or directory` 表明 systemd 在 **ExecStart 路径**找不到 PHP-FPM 可执行文件。以下是系统级解决方案: --- #### 🔧 诊断与修复步骤 1. **确认 PHP-FPM 可执行文件路径** 执行查找命令: ```bash sudo find / -name php-fpm 2>/dev/null ``` - 常见路径: `/usr/sbin/php-fpm`(标准安装) `/usr/local/php/sbin/php-fpm`(源码编译) `/opt/remi/php*/root/usr/sbin/php-fpm`(Remi 仓库) 2. **检查服务文件配置** 打开服务单元文件: ```bash sudo nano /usr/lib/systemd/system/php-fpm.service ``` **关键检查点**: ```ini [Service] ExecStart=/正确路径/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf # 确保路径与步骤1结果完全一致 ``` 3. **修复路径错误** 若路径不匹配,修正后执行: ```bash sudo systemctl daemon-reload # 重载systemd配置 sudo systemctl start php-fpm # 重新启动服务 ``` 4. **验证权限问题** 确保可执行文件有运行权限: ```bash sudo chmod +x /正确路径/php-fpm # 添加执行权限 ls -l /正确路径/php-fpm # 检查权限(应有 -rwxr-xr-x) ``` 5. **处理依赖缺失** 若找不到 `php-fpm` 文件,可能是未安装: ```bash # CentOS/RHEL sudo yum install php-fpm # Ubuntu/Debian sudo apt install php-fpm ``` --- #### ⚠️ 关键注意事项 1. **路径严格匹配** systemd 对路径大小写和符号敏感: `--nodaemonize` ≠ `--no-daemonize` `/usr/sbin/php-fpm` ≠ `/usr/sbin/php-fpm7.4` 2. **配置文件验证** 启动前检查配置语法: ```bash sudo /正确路径/php-fpm -t ``` 输出应显示:`Configuration file /etc/php-fpm.conf test is successful` 3. **SELinux 干扰** 临时禁用排查: ```bash sudo setenforce 0 # 临时关闭SELinux sudo systemctl start php-fpm ``` 若成功,需调整安全策略: ```bash sudo ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm sudo semodule -i my-phpfpm.pp ``` --- #### ✅ 验证修复 ```bash sudo systemctl status php-fpm ``` 成功时输出应包含: ``` Active: active (running) since ... Main PID: XXXX (php-fpm) ``` --- ### 📚 相关问题 1. 如何为不同 PHP 版本配置多实例 PHP-FPM? 2. Nginx 如何正确关联 PHP-FPM 的 Unix socket 或 TCP 端口? 3. 如何优化 PHP-FPM 的 `pm.max_children` 参数避免内存溢出? 4. 系统重启后 PHP-FPM 服务未自动启动的可能原因? 5. 如何诊断 PHP-FPM 的 `502 Bad Gateway` 错误根源?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值