NGX出现502的原因有很多,但大部分可以归结为资源不足。换句话说,如果php-fpm的后端开发出现任何问题,nginx都会向后端php-fpm进程发送相应的手机客户端请求。但是由于php-fpm进程的问题,php代码无法被正确解析,最终发送到手机客户端502是不正确的。
网络服务器之所以出现502,是因为网络连接超时,大家都向服务器发送请求。因为今天网络服务器连接太多,网络服务器级别无法给出所有正常响应,导致这种错误。所以,如果你的网络服务器并发量很大,只能先升级设备,然后按照以下方法升级,才能得到更强的实用效果;但是如果你的高并发不大但是出现了502,一般可以总结为设备的问题和脚本请求超时的问题。
1.PHP.ini的memory_limit太小
(如果有一些php程序进程必须占用巨大的运行内存,这一点必须注意)
2。php-fpm.conf中max_children或max_requests的设置不科学
(短时间设置后,没有足够的cgi进程来解决请求。设定一个交流会后,会出现一段时间有回应一切正常,然后很长时间有回应的情况。一般来说,孩子是按照运行内存来计算的,比如2GB设置64和2G128。这个根据具体情况自主调整。另外,查询当前PHPFastCGI进程数是否足够的指令是:
Netstat-anpo|grephp-cgi|wc-l如果特定应用程序的FastCGI进程数;接近预设;FastCGI进程的数量表明:FastCGI进程的数量;不足,必须扩大。)
3。查询nginx的错误日志
当发现pstream在读取来自上游的响应头时发送了太大的头时,检查客户端头缓冲区和fastcgi缓冲区大小是否太小,是否可以设置为32K。
4。PHP程序运行时间过长,请求超时。检查nginx和fastcgi中的各种超时设置。
nginx:
fastcgi_connect_timeout300
fastcgi_send_timeout300
fastcgi_read_timeout300
keepalive_timeout
php-fpm:
请求_终止_超时=300;
php.ini:
max_execution_time=300
但是request_terminate_timeout的主参数会立即杀死php进程,然后重启php进程,这样前端开发nginx会返回104:连接被peer重置,最好设置为request_terminate_timeout=0;但最重要的是在程序流中设置请求超时,而不是套用php-fpm的request_terminate_timeout。
5.php-fpm主参数max_requests
主参数表示每个子进程在被关闭之前可以解决的最大请求数。在很多结算请求下,如果这个值的设置太小,往往会导致孩子自杀而创建,这样会耗费大量的时间。如果此时所有的孩子都自杀了,那么在重建之前就没有孩子来响应请求了,所以502。该值可以设置为更大或0[无穷大]。
6。提高态度。linux内核中打开的文件总数
能够应用此命令(它必须是根帐户)
echo'ulimit-HSn65536'>;>/etc/profile
echo'ulimit-HSn65536'>;>/etc/rc.本地
来源/etc/配置文件
7。缓存文件设置很小
或者将设备升级到nginx.conf
proxy_buffer_size64k
proxy_buffers512k;
proxy_busy_buffers_size129k;
8。遇到502的解决方法:
调整php和nginx的积压,Nginx和php的积压是一样的。例如:backlog=1000000
以上类似于常见的502问题及其解决方法。其实解决问题最好的办法就是看看nginx和fastcgi的errorlog。
最后用网名做个总结:php-cgi进程数量不足,php实现时间较长,或者php-cgi进程已死,502不正确。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)