http://yangjunwei.com/a/723.html

分析Centos系统下LNMP频繁502 Bad Gateway问题

2012-01-28 杨俊伟 发表评论()
 
 

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

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

日志内容大致如下(借用了一下28、29两天的记录):

Jan 28 22:50:00.309235 [NOTICE] fpm_unix_init_main(), line 284: getrlimit(nofile): max:1024, cur:1024
Jan 28 22:50:00.309552 [NOTICE] fpm_event_init_main(), line 88: libevent: using epoll
Jan 28 22:50:00.309617 [NOTICE] fpm_init(), line 52: fpm is running, pid 7967
Jan 28 22:50:00.310444 [NOTICE] fpm_children_make(), line 352: child 7968 (pool default) started
Jan 28 22:50:00.311328 [NOTICE] fpm_children_make(), line 352: child 7969 (pool default) started
Jan 28 22:50:00.312208 [NOTICE] fpm_children_make(), line 352: child 7970 (pool default) started
Jan 28 22:50:00.313161 [NOTICE] fpm_children_make(), line 352: child 7971 (pool default) started
Jan 28 22:50:00.314210 [NOTICE] fpm_children_make(), line 352: child 7972 (pool default) started
Jan 28 22:50:00.314242 [NOTICE] fpm_event_loop(), line 107: libevent: entering main loop
Jan 29 16:58:30.845059 [NOTICE] fpm_got_signal(), line 70: received SIGUSR2
Jan 29 16:58:30.856418 [NOTICE] fpm_pctl(), line 256: switching to 'reloading' state
Jan 29 16:58:30.856449 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 3 SIGQUIT to child 7972 (pool default)
Jan 29 16:58:30.856463 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 3 SIGQUIT to child 7971 (pool default)
Jan 29 16:58:30.856475 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 3 SIGQUIT to child 7970 (pool default)
Jan 29 16:58:30.856487 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 3 SIGQUIT to child 7969 (pool default)
Jan 29 16:58:30.856537 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 3 SIGQUIT to child 7968 (pool default)
Jan 29 16:58:30.856546 [NOTICE] fpm_pctl_kill_all(), line 181: 5 children are still alive
Jan 29 16:58:35.845629 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 15 SIGTERM to child 7972 (pool default)
Jan 29 16:58:35.845662 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 15 SIGTERM to child 7971 (pool default)
Jan 29 16:58:35.845671 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 15 SIGTERM to child 7970 (pool default)
Jan 29 16:58:35.845678 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 15 SIGTERM to child 7969 (pool default)
Jan 29 16:58:35.845686 [NOTICE] fpm_pctl_kill_all(), line 172: sending signal 15 SIGTERM to child 7968 (pool default)
Jan 29 16:58:35.845691 [NOTICE] fpm_pctl_kill_all(), line 181: 5 children are still alive
Jan 29 16:58:36.450929 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Jan 29 16:58:36.451016 [WARNING] fpm_children_bury(), line 215: child 7968 (pool default) exited on signal 15 SIGTERM after 65319.297391 seconds from start
Jan 29 16:58:36.451062 [WARNING] fpm_children_bury(), line 215: child 7971 (pool default) exited on signal 15 SIGTERM after 65319.294705 seconds from start
Jan 29 16:58:36.451088 [WARNING] fpm_children_bury(), line 215: child 7972 (pool default) exited on signal 15 SIGTERM after 65319.293684 seconds from start
Jan 29 16:58:36.451103 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Jan 29 16:58:36.451834 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Jan 29 16:58:36.451868 [WARNING] fpm_children_bury(), line 215: child 7969 (pool default) exited on signal 15 SIGTERM after 65319.297343 seconds from start
Jan 29 16:58:36.451891 [WARNING] fpm_children_bury(), line 215: child 7970 (pool default) exited on signal 15 SIGTERM after 65319.296487 seconds from start
Jan 29 16:58:36.451903 [NOTICE] fpm_pctl_exec(), line 95: reloading: execvp("/usr/local/php/bin/php-cgi", {"/usr/local/php/bin/php-cgi", "--fpm", "--fpm-config", "/usr/local/php/etc/php-fpm.conf"})

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

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

# ulimit -n
返回:65535

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

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

* soft nofile 65535
* hard nofile 65535

2、提升nginx的进程文件打开数

# vi /usr/local/nginx/conf/nginx.conf
查看 worker_rlimit_nofile 51200;

3、修改 php-fpm.conf 配置文件

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

<value name="rlimit_files">65535</value>
<value name="max_requests">10240</value>

4、修改 sysctl.conf

# vi /etc/sysctl.conf

底部添加

fs.file-max=65535

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

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

Log level
    <value name="log_level">Error</value>

2012.02.20更新:貌似 502 Bad Gateway 已经消失了!!

 
 
 
 
 

php-fpm 老是warning 进程退出问题的更多相关文章

  1. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...

  2. Linux 进程退出后自动启动

    /********************************************************************** * Linux 进程退出后自动启动 * 说明: * 在系 ...

  3. 进程退出前删除自身EXE

    进程退出前删除自身EXE 下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手. ...

  4. linux创建进程和等待进程退出

    在WIN32下,在一个进程里我们可以使用CreateProcess()创建一个进程,然后通过调用WaitForSingleObect(), WaitForMultipleObject()等待进程退出. ...

  5. Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  6. linux 进程学习笔记-进程退出/终止进程

    <!--[if !supportLists]-->Ÿ <!--[endif]-->退出/终止进程 void _exit(int status) 与 void exit(int ...

  7. ssh连接断开后 shell进程退出

    问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问.   解决方法:使用nohup命 ...

  8. 【转】iis解决应用程序池**提供服务的进程意外终止进程ID是**。进程退出代码是'0x80'

    转自:http://blog.sina.com.cn/s/blog_56a68d5501013xdd.html 我们公司旗下的红黑互联会遇到这种问题 事件类型: 警告事件来源: W3SVC事件种类: ...

  9. C# 获取进程退出代码

    我需要写一个程序,让这个程序知道另一个程序是否正常退出,于是就需要获取这个进程的退出代码 在程序如果需要手动退出,可以设置当前的退出代码 static void Main(string[] args) ...

随机推荐

  1. iOS下载使用系统字体

    iOS下载使用系统字体 通用开发中一般使用系统默认的字体: 另外系统也提供了一些其他字体我们可以选择下载使用 1:在mac上打开 字体册 app 即可查找系统支持的字体,适用于ios上开发使用 从ma ...

  2. Caché数据库学习笔记(2)

    目录: 创建新类(表)(class文件)与创建routine(.mac  .inc) 在类里面添加函数(classmethod) Terminal的使用 ======================= ...

  3. HTML5本地数据库(WebSQL)[转]

    除了sessionStorage和localStorage外,HTML5还支持通过本地数据库进行本地数据存储,HTML5采用的是"SQLite"这种文件型数据库,该数据库多集中在嵌 ...

  4. bzoj 3131: [Sdoi2013]淘金

    #include<cstdio> #include<iostream> #include<queue> #include<algorithm> #def ...

  5. 1415-2个人项目Individual Project

    作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...

  6. Windows 7中无法访问FTP的解决方法

    解决: netsh advfirewall set global StatefulFTP disable

  7. linux kernel tainted

    日志中会有一些信息: dmesg | grep -i tainted 具体代码可以通过proc看到: cat /proc/sys/kernel/tainted 数字的意义: tainted: Non- ...

  8. Android 微信UI 、点击操作

    上一篇,我们介绍了微信界面的相关知识点.今天我们就来把微信的界面做出来. 首先我们新建一个layout-->LinearLayout-->weixin.xml 我们使用上中下线性布局,采用 ...

  9. Objective-C学习笔记-第二天(1)

    Objective-C中,调用方法采用的是一种消息传递机制. 参考文章:http://blog.csdn.net/xingyevc/article/details/39397873 如果向某个对象传递 ...

  10. 三部曲一(搜索、数学)-1016-Code

    Code Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 60000/30000K (Java/Other) Total Submissi ...