502 和 php-fpm.conf

1.php-cgi进程数不够用。php执行时间长,导致没有空闲进程处理新请求。

2.php-cgi进程死掉。php-fpm超时时间短,当前进程执行超时关闭连接。

实例:

1.request_terminate_timeout引起的资源问题

request_terminate_timeout默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。

php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,request_terminate_timeout可以覆盖max_execution_time,所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。

request_terminate_timeout设置过短:

当超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程(进程会被kill掉,用strace看是这样的)。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。此时nginx错误日志日志中会出现“104: Connection reset by peer”。

request_terminate_timeout设置过长:

request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起file_get_contents的资源问题。如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx无法再处理新请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免”502 BadGateway”。

解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给 file_get_contents加一个超时参数。

$ctx = stream_context_create(array('http' => array('timeout' => 10    //设置一个超时时间,单位为秒
    )
));file_get_contents($str, 0, $ctx);

2.max_requests参数配置不当,可能会引起间歇性502错误:

pm.max_requests = 1000

设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的.

设置为 ‘0’ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

但是为什么要重启进程呢?

一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。

正是因为这个机制,在高并发的站点中,经常导致 502 错误,我猜测原因是 PHP-FPM 对从 NGINX 过来的请求队列没处理好。不过我目前用的还是 PHP 5.3.2,不知道在PHP5.3.3 中是否还存在这个问题。

目前我们的解决方法是,把这个值尽量设置大些,尽可能减少 PHP-CGI 重新 SPAWN 的次数,同时也能提高总体性能。在我们自己实际的生产环境中发现,内存泄漏并不明显,因此我们将这个值设置得非常大(204800)。大家要根据自己的实 际情况设置这个值,不能盲目地加大。

话说回来,这套机制目的只为保证 PHP-CGI 不过分地占用内存,为何不通过检测内存的方式来处理呢?我非常认同高春辉所说的,通过设置进程的峰值内在占用量来重启 PHP-CGI 进程,会是更好的一个解决方案。

2.504 和 nginx.conf

Nginx 504 Gateway Time-out则是与nginx.conf的设置有关;

部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

http
{......fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;......
}

也可以写到server段:

看http://blog.csdn.net/dc_726/article/details/11950189

讲的很详细,好好看看。

3. 413 Request Entity Too Large

增大client_max_body_size

client_max_body_size:指令指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段. 如果请求大于指定的值,客户端将收到一个"Request EntityTooLarge" (413)错误. 记住,浏览器并不知道怎样显示这个错误.解决办法是在php.ini中增大post_max_size 和upload_max_filesize

nginx和fpm的进程数配置和502,504错误相关推荐

  1. php fastcgi进程启动,如何设置nginx的php fastcgi进程数

    九州编程 源码包可以在官方主页上下载.Ubuntu 7.10可以直接通过apt安装,也可以从这里下载最新的deb包:sudo apt-get install nginx如果要自己编译的话,需要确保自己 ...

  2. Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!

    呕心沥血书写,看完后对Nginx了如执掌,不看真的后悔!! shell脚本日志分割 设置连接超时 Nginx深入优化 更改进程数 配置网页压缩 配置防盗链 20.0.0.25 主机:开始盗链 20.0 ...

  3. Nginx优化与防盗链(隐藏版本号、配置缓存时间、日志分割、修改进程数、配置连接超时、使用gzip压缩页面、防盗链设置,fpm优化)

    文章目录 隐藏Nginx版本号 网页压缩 网页压缩配置 网页缓存时间 网页缓存时间设置 更改Nginx运行进程数 连接超时 nginx防盗链设置 盗链网站 配置httpd 日志分割 fpm参数优化 隐 ...

  4. php fpm子进程数配置,php-fpm进程管理方式以及子进程数量配置原则详解

    php-fpm的进程管理方式pm是一个重要的参数,主要来控制子进程的数量. pm进程管理方式有三种: static: 表示在php-fpm运行时直接fork出 pm.max_chindren个子进程 ...

  5. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况

    Shell脚本查看Nginx并发连接数.进程数和常驻内存占用情况 http://xiaoyongxing1.blog.163.com/blog/static/642807522015144302240 ...

  6. linux设置进程最大内存,修改limit配置限制linux最大文件描述符和最大进程数

    临时修改 命令:ulimit[-aHS][-c][-d][-f][-m][-n][-p][-s][-t][-u][-v] 参数:-a 显示目前资源限制的设定. -c core文件上限 设定core文件 ...

  7. PHP-FPM进程数的设定

    近日,服务器出现异常,网站不能正常访问.经排查是php的问题. 在重启php-fpm时,恢复正常.1分钟之后又出现故障.查看php日志文件 /usr/local/php/var/log 后提示 WAR ...

  8. php fpm listen.owner,php-fpm配置解释

    希望本文所述对大家的PHP有所帮助.请大家关注我的其他博客github和csdn 约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-f ...

  9. php fpm core,php-fpm的配置和优化

    php-fpm的安装目录 下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多. centos等linux平台 /usr/local/php/php /usr/local/php/etc/ ...

最新文章

  1. 追根究底之以不变求万变:利用SetCapture捕获鼠标
  2. Still unable to dial persistent://blog.csdn.net:80 after 3 attempts
  3. android sdk 更新用的HOSTS
  4. MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】
  5. java 正则表达式语法_Java 正则表达式基础语法
  6. 1971. Find if Path Exists in Graph
  7. Excel 宏工作簿 VBAProject 工程保护 - 代码不可查看
  8. Biorhythms(POJ-1006)
  9. FPGA的一些细节(持续更新)
  10. 一步一步实现KNN分类算法
  11. 矩阵范数与向量范数的公式及其理解
  12. 代码实现利用inf文件安装硬件驱动
  13. DTC标准故障码格式解析
  14. git文件没有绿色红色小图标
  15. 用CAD看图软件查找文字需要怎么做
  16. [计算机组成原理] 第六章 控制系统与CPU
  17. 微信小程序云开发(2)— 云数据库
  18. linux 向日葵 使用方法,远程控制工具——Centos7上向日葵安装使用
  19. 《平安夜》钢琴谱上的虚线表示什么?
  20. c++实现汉诺塔(图文并茂)

热门文章

  1. Vue2.0---webpack打包知识点-2
  2. Spring MVC学习-------------訪问到静态的文件
  3. Android图片处理
  4. 5款非常好用的前端在线编辑器推荐
  5. Hyper-V 3.0部署PART 14:准备仲裁磁盘
  6. 如何测试组件的性能?
  7. 怎么定义list_常用的List接口下集合
  8. 设计模式 — 创建型模式 — 单例模式
  9. Python 进阶 — 创建本地 PyPI 仓库与 Python 程序的离线部署
  10. 互联网协议 — TCP — 滑动窗口(网络质量保障)