php读数据库504 php数据库读取

访问php页面出现504 Gateway Timeout 怎么解决一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out
现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K
默认的fastcgi进程响应的缓冲区是8K, php读数据库504我们可以设置大点
在nginx.conf里, 加入:
fastcgi_buffers 8 128k
这表示设置fastcgi缓冲区为8×128k
当然如果在进行某一项即时的操作, 可能需要nginx的超时参数调大点, 例如设置成60秒:
send_timeout 60;
只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错
另一篇文章
【php读数据库504 php数据库读取】首先是更改php-fpm的几处配置php读数据库504:
把max_children由之前的10改为现在的30,这样就可以保证 有充足的php-cgi进程可以被使用php读数据库504;
把request_terminate_timeout由之前的0s改为60s , 这样php-cgi进程 处理脚本的超时时间就是60秒,可以防止进程都被挂起 , 提高利用效率 。
接着再更改nginx的几个配置项 , 减少FastCGI的请求次 数 , 尽量维持buffers不变php读数据库504:
fastcgi_buffers由 4 64k 改为 2 256k;
fastcgi_buffer_size 由 64k 改为 128K;
fastcgi_busy_buffers_size 由 128K 改为 256K;
fastcgi_temp_file_write_size 由 128K 改为 256K 。
好了,重新加载php-fpm和nginx的配置,再次测试,至今两周时间内没有再出现504 Gateway Time-out的情况,算是达到效果了 。
另外,php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一,因此可以将php-fpm的处理方式改成apache模式 。
apache-like
php进程超时接口返回504错误分析 在一次接口测试中,发现返回的http504 time out 的错误 , 然后查看了php-fpm的错误日志 , 发现了如下错误
从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下 。
Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out
一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等 , 如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的 。
另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间
当php脚本的执行时间超过这个时间时 , PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程 。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误 。
以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:
所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了 。request_terminate_timeout可以覆盖max_execution_time,
所以如果不想改全局的php.ini , 那只改PHP-FPM的配置就可以了 。
此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项 。这两个配置表示在fail_timeout事件内 , 如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误 。
所以可以将max_fail调大一些 , 将fail_timeout调小一些 。
PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了 。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置
以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:
调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了 。
而且这三项配置可以配置在http、server级别,也可以配置在location级别 。担心影响其他应用的话 , 就配置在自己应用的location中吧 。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的 。
参考链接:感谢分享!
php504错误解决方式:
一般默认的fastcgi进程响应的缓冲区是8K,这时可以设置大一点,在nginx.conf里 , 加入:fastcgi_buffers 8 128k,这表示设置fastcgi缓冲区为8块128k大小的空间 。
当然如果在进行某一项即时的操作, 可能需要nginx的超时参数调大点,例如设置成60秒:send_timeout 60;经过这两个参数的调整 , 一般不会再提示“504 Gateway Time-out”错误,问题基本解决 。
有时候网站需要对php-fpm和nginx进行配置修改 。因为这种情况下,也会出现“504 Gateway Time-out”错误提示 。而这时候Nginx 504 Gateway Time-out的含义就是所请求的网关没有请求到 , 简单来说就是没有请求到可以执行的PHP-CGI 。
解决方式:
更改php-fpm的几处配置即可:
把max_children由之前的10改为现在的30,这样就可以保证有充足的php-cgi进程可以被使用;
把request_terminate_timeout由之前的0s改为60s,这样php-cgi进程处理脚本的超时时间就是60秒,可以防止进程都被挂起,提高利用效率 。
接着再更改nginx的几个配置项,减少FastCGI的请求次数,尽量维持buffers不变:
fastcgi_buffers由 4 64k 改为 2 256k;
fastcgi_buffer_size 由 64k 改为 128K;
fastcgi_busy_buffers_size 由 128K 改为 256K;
fastcgi_temp_file_write_size 由 128K 改为 256K 。
重新加载php-fpm和nginx的配置,再次测试 , 如果没有出现“504 Gateway Time-out”错误,问题便解决了 。
解决方式:
将php-fpm的处理方式改成apache模式即可 。
如何解决“504 Gateway Time out”错误 我们在访问大流量网站或者运营有较多数据php读数据库504的网站时候,偶尔会出现504 Gateway Time-out错误,这多是网站服务器配置不当导致php读数据库504的 , 下面分享一下504GatewayTime-out错误的解决方法 。
代码释义
504 Gateway Time-out就是字面意思,可以理解为网页请求超时,也就是浏览网站网页所发出的请求没有反应或者未响应,在网站程序层面来说,就是请求未能够执行相应的PHP-CGI程序,或者PHP-CGI程序未能做出相应的处理,又或者是CGI程序的响应处理结果未能够反馈到浏览器或者未能及时反馈到浏览器 。
报错背景
504 Gateway Time-out错误多是存在于Nginx网站服务器环境下 , 多与nginx.conf与php-fpm.conf设置是否正确合理有关 。解决方法就是根据网站服务器性能及网站流量等诸多因素整合考虑,正确合理的设置niginx.conf和php-fpm.conf配置 。
解决方法
进行正确合理nginx.conf配置 , 我们需要首先了解和清楚我们网站服务器的配置性能,包括CPU、内存等,并对网站服务器进行必要的性能测试(可参考:vps主机性能测试方法详解),从而准确的掌握网站服务器自身性能状况php读数据库504;
其次,是通过网站统计代码的添加,分析一段时间内网站流量状况,比如:CNZZ站长统计等,掌握网站日流量及PHP-CGI请求的大概情况;
最后,根据我们掌握的服务器性能状况及网络流量情况,合理的对nginx.conf中的下列字句进行合理正确的设置 。
fastcgi_connect_timeout300s;
fastcgi_send_timeout300s;
fastcgi_read_timeout300s;
fastcgi_buffer_size128k;
fastcgi_buffers8128k;#8128
fastcgi_busy_buffers_size256k;
fastcgi_temp_file_write_size256k;
fastcgi_intercept_errorson;
还有就是php-fpm.conf中max_children与request_terminate_timeout两个重要参数的设置 。这两个参数的设置需要我们根据PHP程序情况及服务器带宽状况综合考虑并计算出合理准确的值,才能够避免504 Gateway Time-out或者其他CGI无响应错误的出现 。
php读数据库504的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php数据库读取、php读数据库504的信息别忘了在本站进行查找喔 。

    推荐阅读