php-fpm warning 进程退出问题

最近VPS总是出现 Nginx 502 Bad Gateway 错误,导致网页无法正常访问,但FTP和SSH正常连接,很是伤脑筋!这次好好整治一下!

根据问题,应该是 php-fpm 出了问题,先查看日志文件 /usr/local/php/logs/php-fpm.log

1
2
3
4
5
6
[25-Sep-2017 14:13:42] WARNING: [pool www] child 4467 exited on signal 15 (SIGTERM) after 344743.168205 seconds from start
[25-Sep-2017 14:13:42] NOTICE: [pool www] child 4698 started
[25-Sep-2017 14:17:02] WARNING: [pool www] child 25731, script '/data/wwwroot/myxz/public/admin.php' (request: "GET /admin.php") execution timed out (121.574793 sec), terminating
[25-Sep-2017 14:17:02] WARNING: [pool www] child 25731 exited on signal 15 (SIGTERM) after 29334.308572 seconds from start
[25-Sep-2017 14:17:02] NOTICE: [pool www] child 4875 started
[25-Sep-2017 14:19:49] WARNING: [pool www] child 26830, script '/data/wwwroot/myxz/public/admin.php' (request: "GET /admin.php") execution timed out (107.783786 sec), terminating

满眼的NOTICE错误,据观察至后几天,错误日志都是如此!据网络资料分析说,这类错误大都是由于php线程打开文件句柄受限导致的错误,这里综合各位童鞋的分析,整理记录如下,希望能解决此类 502 问题!

首先检查一下ulimit -n的值,SSH输入命令:

1
ulimit -n

返回:65535

  • 提升服务器的文件句柄打开

SSH命令:# vi /etc/security/limits.conf,在结尾处添加以下内容:

1
2
* soft nofile 65535
* hard nofile 65535
  • 提升nginx的进程文件打开数
    vi /usr/local/nginx/conf/nginx.conf
    查看
1
worker_rlimit_nofile 51200;
  • 修改 php-fpm.conf 配置文件

前面确认了 ulimit -n 值为 65535,/usr/local/php/etc/php-fpm.conf 中的选项 rlimit_files 确保和此数值一致。

1
2
pm.max_requests = 10240
rlimit_files = 65535
  • 修改 sysctl.conf
    vi /etc/sysctl.conf
    底部添加
1
fs.file-max=65535

至此,重启 /root/lnmp restart 生效,看看还有没有类似错误信息出现!

ps.为减小php-fpm.log文件大小,可将 /usr/local/php/etc/php-fpm.conf 中的 Log level 由 notice 修改为 ERROR,这样能降低日志的生成速度!

1
log_level = ERROR