一次蛋疼的nginx 502排查过程
2014-04-05 21:07
357 查看
线上一台机器(该论坛所在机器)近期频繁出现502,每100次访问就会出现10次,这频率也太高了。于是开始了我的502排查之旅。
1.1 ps aux |grep -c php复制代码结果为2002 netstat -an |grep -c php复制代码结果一直在5以下,这说明php-cgi 的进程是绝对够用的。
2. 查看php-fpm.log3 tail -f /usr/local/php/logs/php-fpm.log复制代码无有价值信息
3. 查看nginx错误日志4 tail -f /usr/local/nginx/logs/error.log复制代码无有价值信息
4. 感觉问题可能出在了nginx的配置上,于是网上找关于nginx.conf 的配置说明,改来改去始终解决不了这难缠的502。(该过程前后延续一周之多,改了N多个参数,因为没有价值,所以我不再详细记录,在这里简单一笔带过。)
5. 几天过后,突然灵机一动,nginx的错误日志既然不报错,那说明定义的日志级别没有达到要报错的要求,于是找资料修改nginx错误日志级别为error(默认为crit)
请参考http://mylinux.5d6d.net/thread-1289-1-1.html
终于发现有价值的信息:
connect() to unix:/tmp/php-fpm.socket failed (11: Resource temporarily unavailable) while connecting to upstream
google了一番,马上就找到了解决问题的方法:
6. 修改php-fpm.conf
把5 <value name="backlog">-1</value>复制代码改成:6 <value name="backlog">1024</value>复制代码这是因为,php-fpm 在 backlog 设置为 -1 的情况下,表示backlog数无限制,由操作系统决定,而操作系统是由内核参数net.core.somaxconn 决定,我的操作系统该参数的值设置的很大为262144。该参数的值默认为128,我想设置成262144肯定是不合理的。所以,我又试验了一下。
7. 不修改php-fpm.conf ,即backlog的值为-1, 然后把net.core.somaxconn修改为默认值128 ,此时也没有再出现502
总结,本次502事故的主要原因是内核参数配置不当引起的,至于这个backuplog 参数具体的含义以及应该配置多大合理,以后我会专门写一篇帖子来阐述。
1.1 ps aux |grep -c php复制代码结果为2002 netstat -an |grep -c php复制代码结果一直在5以下,这说明php-cgi 的进程是绝对够用的。
2. 查看php-fpm.log3 tail -f /usr/local/php/logs/php-fpm.log复制代码无有价值信息
3. 查看nginx错误日志4 tail -f /usr/local/nginx/logs/error.log复制代码无有价值信息
4. 感觉问题可能出在了nginx的配置上,于是网上找关于nginx.conf 的配置说明,改来改去始终解决不了这难缠的502。(该过程前后延续一周之多,改了N多个参数,因为没有价值,所以我不再详细记录,在这里简单一笔带过。)
5. 几天过后,突然灵机一动,nginx的错误日志既然不报错,那说明定义的日志级别没有达到要报错的要求,于是找资料修改nginx错误日志级别为error(默认为crit)
请参考http://mylinux.5d6d.net/thread-1289-1-1.html
终于发现有价值的信息:
connect() to unix:/tmp/php-fpm.socket failed (11: Resource temporarily unavailable) while connecting to upstream
google了一番,马上就找到了解决问题的方法:
6. 修改php-fpm.conf
把5 <value name="backlog">-1</value>复制代码改成:6 <value name="backlog">1024</value>复制代码这是因为,php-fpm 在 backlog 设置为 -1 的情况下,表示backlog数无限制,由操作系统决定,而操作系统是由内核参数net.core.somaxconn 决定,我的操作系统该参数的值设置的很大为262144。该参数的值默认为128,我想设置成262144肯定是不合理的。所以,我又试验了一下。
7. 不修改php-fpm.conf ,即backlog的值为-1, 然后把net.core.somaxconn修改为默认值128 ,此时也没有再出现502
总结,本次502事故的主要原因是内核参数配置不当引起的,至于这个backuplog 参数具体的含义以及应该配置多大合理,以后我会专门写一篇帖子来阐述。
相关文章推荐
- 访问Nginx发生SSL connection error的一种情况
- 星外虚拟主机访问被控出现Unspecified error解决方法
- IIS 错误 Server Application Error 详细解决方法
- On Error Resume Next 语句
- IIS运行错误 Server Application Error 错误代码 Error: 8004的解决方法
- 收集整理的http/1.1 500 server error错误的解决方法
- SQL 2005 ERROR:3145 解决办法(备份集中的数据库备份与现有的数据库不同)
- 用VBS记录客户机操作的代码
- PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
- 从数据库中读取记录横向排列
- 解决mysql ERROR 1017:Can't find file: '/xxx.frm' 错误
- MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
- php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()'d code error
- ERROR/AndroidRuntime(17121)的问题解决
- IIS提示Server Application Error的解决方法集锦第1/2页
- mysql 有关“InnoDB Error ib_logfile0 of different size”错误
- 写php分页时出现的Fatal error的解决方法
- fatal error LNK1104: 无法打开文件“libc.lib”的解决方法
- 有关ajax的error与后台的异常问题解决
- PHP XML error parsing SOAP payload on line 1