我有这个反复出现的问题与Nginx大约一天一次,大约两次在高流量负载。解决办法很简单:重新启动服务器,但当错误发生时,Nginx完全停止工作。我有一个Nginx PHP-FPM设置。
问题开始于:
020/09/27 09:57:27 [error] 38#38: *430982 upstream timed out (110: Connection timed out) while connecting to upstream, client: x.x.x.x, server: example.com, request: "POST /api/sessions/wri
然后它会发展成:
2020/09/27 10:03:22 [alert] 40#40: *431277 open socket #18 left in connection 51
2020/09/27 10:03:22 [alert] 38#38: *431298 open socket #34 left in connection 166
2020/09/27 10:03:22 [alert] 40#40: *431288 open socket #28 left in connection 59
2020/09/27 10:03:22 [alert] 38#38: *431296 open socket #32 left in connection 169
2020/09/27 10:03:22 [alert] 38#38: *431257 open socket #36 left in connection 177
2020/09/27 10:03:22 [alert] 38#38: *431291 open socket #23 left in connection 178
2020/09/27 10:03:22 [alert] 38#38: *431253 open socket #27 left in connection 188
2020/09/27 10:03:22 [alert] 38#38: *431300 open socket #31 left in connection 197
2020/09/27 10:03:22 [alert] 38#38: *431312 open socket #12 left in connection 204
2020/09/27 10:03:22 [alert] 38#38: *431259 open socket #38 left in connection 206
2020/09/27 10:03:22 [alert] 37#37: aborting
2020/09/27 10:03:22 [alert] 38#38: aborting
2020/09/27 10:03:22 [alert] 40#40: aborting
2020/09/27 10:03:23 [warn] 21568#21568: 8096 worker_connections exceed open file resource limit: 1024
2020/09/27 10:08:24 [warn] 21574#21574: *636 upstream server temporarily disabled while connecting to upstream,
现在GET请求仍然有效。所以如果我去网站,它加载。但是任何POST、PUT或DELETE操作都会失败,所以最终用户除了浏览什么都不能做。
为什么会这样?是否有一种健康检查可以用来检测这些问题?
3条答案
按热度按时间3okqufwl1#
关于您看到的第一个超时错误,如果您使用的是FastCGI配置,那么您可能需要查看以下内容:
确保该值比PHP将执行的最长处理时间长。
您还应该将worker connections设置增加到您期望的并发连接数(例如10000):
此外,正如Sang Lu的回答所提到的,您需要确保nginx可以打开足够的文件句柄(也包括网络套接字)。
如果你以root身份启动主nginx进程,你可以简单地做(至少两次以上的
worker_connections
配置:另一种方法是为启动主nginx进程的用户使用
ulimit
或/etc/security/limits.conf
。slhcrj9b2#
可能是你的Nginx进程打开了太多的文件。您可以通过遵循本文来增加此限制:How to Increase Number of Open Files Limit in Linux
要更改此设置,您需要root权限,并执行以下操作:
1.打开 /etc/security/limits.conf 文件:
vi /etc/security/limits.conf
1.将这些行附加到文件末尾:
1.保存所有更改并重新启动您的服务器/VPS以应用新设置。
注意:10240为进程最大可以打开的文件数。根据需要更改此值。
ebdffaop3#
您可以采取以下几个步骤来诊断和解决问题:
1.增加PHP-FPM超时需要更改
request_terminate_timeout
,request_slowlog_timeout, and
max_execution_timesettings in your PHP-FPM configuration file (often located at
/etc/php-fpm.confor
/etc/php/version/fpm/php-fpm.conf)。完成更改后,重新启动PHP-FPM。 1.**增加Nginx超时:**在Nginx配置文件(通常位于
/etc/nginx/nginx.conf或
/etc/nginx/conf.d/default.conf)中,调整
proxy_read_timeout和
fastcgi_read_timeout`的值,以允许更长的请求处理时间。修改后重启Nginx。1.**验证服务器的资源:**在高流量期间关注服务器的资源使用情况。检查您的CPU、内存和磁盘I/O空间是否不足。如果需要,可以考虑更新服务器或简化应用程序中的代码和数据库查询,以提高性能。
1.启用PHP-FPM慢日志来查找可能导致超时的任何缓慢请求。取消注解'slowlog'指令并将其值设置为您希望在PHP-FPM配置文件中存储日志文件的目录。完成更改后,重新启动PHP-FPM。通过分析日志文件查找应用程序代码中的任何瓶颈。
1.**实施健康检查:**要对Nginx和PHP-FPM服务器进行常规健康检查,您可以设置监控系统或使用第三方工具。这些检查有助于在问题影响服务之前发现问题。服务器的响应时间、CPU使用率、内存利用率和其他相关数据都可以被观察到。
1.开启错误日志:确保PHP-FPM和Nginx错误日志都开启。查看错误日志,以查找任何相关的错误消息,这些错误消息可以提供有关超时原因的更多信息。