问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何解决Nginx服务自动关闭问题

发布网友 发布时间:2022-02-27 00:58

我来回答

1个回答

热心网友 时间:2022-02-27 02:27

首先排除是否为网络问题:检查了iptable等。同时思考,如果真的是网络问题,不应该运行一段时间后,才出现无法接受新连接的现象。
为了验证,当出现问题时,我又重新启动Nginx,发现又可以接收新的请求了。也就是说出现问题时,只需要重启Nginx就可以解决,那么自然不是网络因素。
判定是否是Nginx本身的问题(不一定是指代码包括我写的配置文件):因为这个代理服务器是为了测试fastsocket项目的稳定性,所以 Nginx是加载了fastsocket优化服务的。这时,就需要最纯粹的Nginx环境。我去掉了fastsocket服务,然后再用同样的配置启动 Nginx。这时,就排除了Nginx本身的问题。那么,究竟是否是fastsocket的bug呢?
这里先做一个小广告: fastsocket是新浪主导的一个开源项目,其通过封装socket套接字调用,无需改动服务程序,即可大幅提升服务程序性能。作者也是其中的维护者之一。这里小小推广一下:https://github.com/fastos/fastsocket。当使用fastsocket默认加载参数时,nginx运行一段时间就无法接受新连接请求了。
定位fastsocket问题:fastsocket的大部分优化功能都是有功能开关的,默认会使用一些功能,同时可以在加载动态模块时,使用参数指定是否打开开关。这时,先做实验,从所有功能关闭开始,逐渐打开功能开关,最后定位到enable_listen_spawn功能打开时,就会出现问题。并多次做实验,确定这是一个必现的问题。
当确定可以重现后,想这难道是一个fastsocket的bug吗?于是,先跟林晓峰同学说了一声,告诉他我的发现,毕竟fastsocket是他在sina时的工作,他最为熟悉代码。他说这可能是Nginx的配置使用了accept_mutex。我的配置文件虽然没有配置accept_mutex,但是没想到Nginx的accept_mutex是默认打开的。但是他忘了为什么会这样了?依稀记得是Nginx hang在了mutex中,具体原因记不清了。所以fastsocket的说明也是要求disable accept_mutex。
因为我一直以来有这还不错的求知欲,所以一定要搞清楚这个问题。同时我认为,如果真的是一启用accept_mutex,fastsocket和nginx就会有兼容问题,那也应该算是fastsocket的bug,应该将其解决掉。
定位Nginx hang在什么位置:这个很简单,使用strace -p跟踪Nginx的每个worer进程。发现大部分worker进程是在不断的epoll_wait,而其中一个worker进程,始终停留在epoll_wait中。重试多次,每次都是停留在epoll_wait中。
现在已经确定了本次问题,当使用fastsocket的enable_listen_spawn功能时,也就是fastsocket自动为当前CPU创建本地的listen socket套接字时,就会出现问题。
解决问题
当定位到问题时,就需要一步一步的找到原因,查看为什么一个worker进程始终停留在epoll_wait中。这时候,其实思考还是要优于动手。先思考,再动手,动手之后,看到结果,再做进一步思考。
查看该worker进程停留在epoll_wait的什么位置:只能通过日志形式来判断hang在epoll_wait的哪个位置?这时,不能用内核普通的printk来打印日志,不然就会淹没于大量正常工作worker进程打印的日志中。我们需要根据pid来打印日志。
再做一个小广告:我做了一个内核小工具git@github.com:gfreewind/unit_perf.git。是用来定位内核代码的性能瓶颈工具,和一些辅助工具。大家觉得还可以的话,就给赞个星星。
它提供一个宏UP_PID_INFO_LOG用于打印指定PID的日志,pid可以通过proc来指定。
这样我在epoll_wait中增加了大量的日志。在Nginx启动后,通过proc指定就打印某个worker进程的日志。
最后发现epoll_wait是因为指定了无限等待时间,所以该worker进程一直在hang住。
Nginx让一个worker进程无限等待,这稍微*了我对Nginx的认识。我认为Nginx一直都是使用无阻塞的系统调用,至少核心模块是这样处理的。那么为什么会出现这个现象呢?这时候,就需要思考,而不是动手了。
毫无疑问,accept_mutex是一个关键。它本身是用于均衡不同worker进程的负载。稍微阅读一点Nginx相关的 代码,就可以明白。在Nginx无法接收新连接请求时,一定是该轮到hang住的进程接收新连接请求。所以尽管其它进程没有hang住,但是它们是无法接 受新请求,而能够接收新请求的进程却hang住,这样就导致了问题的产生。
为什么hang住的进程无法接收到新的请求呢?这时还是思考优先。首先要勾画标准的内核TCP连接的过程,然后对比启用fastsocket 后,TCP连接的过程。很可能是这两者之间的区别,造成了问题。尤其是启用了spawn socket时,与标准流程的不同。spawn socket时,实际上为每个cpu都创建了一个本地listen 套接字的hash表,与全局的listen表区分开。这样一方面访问全局hash表时需要的锁,另一方面也做到了将TCP会话做到本地,可以尽量命中 cache。 对于同一个CPU,由于有两个listen表的存在,所以在收到新的TCP连接请求时,必须先检查本地的listen表,然后再检查全局表。 根据这样的流程和现象,应该是所有的连接请求,都被发到其它的CPU,并且匹配中了其它CPU的本地listen表,所以全局表中的listen socket套接字一直没有被匹配到。
那么hang住的进程,既没有连接请求匹配本地listen表中的套接字,而全局表也一样,因为被请求都被其它CPU命中了本地的套接字。
所以问题更为明朗了,hang住的进程所在的CPU不能收到任何新连接请求。
这时其实已经到了冲刺的时候了。开始的时候,我还想着,是否是fastsocket影响了数据包的分发,还想检查一下代码。但一想,还是先看看 RPS的设置吧——虽然我没有设置网卡的任何RPS。结果出乎我意料,原来阿里云ECS服务器默认就把网卡的RPS设置了,唯一的*网卡的RPS设置为 了0000,所以只有CPU 0能收到新连接请求,而另外的CPU1收不到任何的连接请求,这就造成了运行在CPU1上的worker进程hang住。
最后我修改了该网卡的RPS设置,使其可以将数据包分发到不同的CPU上。这样在加载了fastsocket后,即使打开了accept_mutex,Nginx也可以正常工作了。
本次过程,虽然最后发现只是服务器配置的问题,但整个儿过程还是收获不少。唯一的遗憾,是还没有定位Nginx对与epoll_wait的超时计算。开始的时候,都是500ms,后面因为什么因素变成了无限。这留到有时间的时候,再阅读Nginx源码吧。
Nginx服务怎么重启啊?

一、使用命令行重启 在Nginx安装目录下,可以通过命令行工具执行重启命令。对于大多数Linux系统来说,通常使用以下命令:1. 进入Nginx安装目录的sbin文件夹。2. 执行命令:`./nginx -s reload`。这条命令会优雅地重启Nginx服务,不会立即关闭已经建立的连接。当现有请求处理完成后,会重新加载配置文件并启...

还在找storm proxy?

作为上海圣钧信息科技有限公司的工作人员,我公司并不提供名为"Storm Proxy"的服务。我们致力于提供高质量的信息技术服务,包括但不限于云计算、大数据处理、人工智能等领域。我们的服务对象主要是企业客户,为其提供定制化的解决方案和技术支持。如果您正在寻找相关的服务,建议您通过搜索引擎或行业专业网站等途径进行查询。同时,请注意防范虚假信息和欺诈行为,确保您选择正规、可靠的服务提供商。如有其他问题或需要进一步了解,欢迎随时与我们联系。SmartProxy企业级海外住宅IP代理服务商,覆盖全球200+国家和地区,高匿稳定,动态住宅代理/静态住宅代理/账密提取,100%原生住宅IP,城市级定位,支持HTTP/HTTPS/SOCKS5协议,不限带宽,纯净高匿,网络集成更快捷,注册即送流量!Smartproxy代理...

Nginx服务器错误是什么原因?

解决方法:根据实际Nginx后端服务器的处理时间修改客户端超时时间。4、脚本错误(php语法错误、lua语法错误)。解决方法:查看nginx_err_log php_err_log。5、访问量过大,系统资源限制,不能打开过多文件。 磁盘空间不足。(access log开启可能导致磁盘满溢,服务器主动关闭)。解决方法:修改/etc/sysctl...

502 bad gateway怎么解决 nginx

解决方法主要包括:根据服务器负载和网站特性,调整缓冲区大小和header参数,使其保持在合理的范围内。对于php-cgi进程,需要增加max_children的设置,但需注意,这些配置会占用大量内存,因此必须根据服务器性能来合理调整,否则可能适得其反。总之,要解决502 bad gateway,关键在于找到问题的根源,对症下药...

解决nginx403forbidden

四、重新加载Nginx配置 在修改Nginx配置文件后,需要重新启动或重新加载Nginx服务以使配置生效。可以使用以下命令重新加载Nginx配置:shell sudo nginx -t # 检查配置文件是否正确 sudo systemctl reload nginx # 重新加载Nginx服务 具体解释如下:Nginx的403 Forbidden错误通常是因为权限问题导致的。可能是...

nginx反向代理,网站访问出现502,页面刷新之后可以正常访问?

1、nginx proxy的超时时间太短。解决方法:可以通过修改nginx配置调整。2、客户端主动关闭了连接。解决方法:检查客户端程序是否有问题。3、nginx两次提交post间隔过快。解决方法:检查代码有没有类似于循环提交POST的操作或者客户端有没有并发测试。4、数据库服务器连接失败,session服务器过期。解决方法:检查...

如何解决nginx504gatewaytime-out错误

解决nginx 504 Gateway Time-out错误的方法 一、增加代理连接的超时时间 1. 打开Nginx配置文件。2. 找到与代理相关的配置段,增加或修改`proxy_connect_timeout`和`proxy_read_timeout`的值。例如,将它们设置为更长的超时时间。二、优化后端服务性能 1. 检查后端服务的性能,确保其能够及时处理请求。...

Linux系统关闭Nginx服务器linux关闭nginx

第一步,使用root用户登录你的系统,然后在终端中使用以下命令查看Nginx服务器状态:sudo service nginx status 该命令将会显示Nginx服务的运行状态和配置信息。第二步,如果Nginx服务正在运行,则可以使用以下命令停止Nginx服务:sudo service nginx stop 该命令将停止Nginx服务,如果想终止运行的Nginx服务,请...

如何解决Nginx无法连接到服务器?

解决方案如下:1、打开你的浏览器,以360浏览器为例。2、点击最右上角的标志,如图所示,在下拉菜单中点击internet 选项.3、最后选高级,通过代理连接使用HTTP 1.1 勾上即可。

启动nginx服务的命令?

启动nginx服务的命令是:sudo service nginx start。详细解释如下:1. Nginx服务介绍 Nginx是一个高性能的HTTP和反向代理服务器。它可以作为独立的服务器使用,也可以作为负载均衡的服务器使用。在部署web应用或提供网络服务时,经常需要使用到Nginx。2. 启动命令构成 启动Nginx服务的命令由几个部分组成,...

windowsnginx怎么关闭?

要关闭Windows上的Nginx服务,您可以按照以下步骤操作:一、通过服务列表关闭Nginx 1. 打开“运行”对话框,输入“services.msc”并回车,打开服务列表。2. 在服务列表中找到“Nginx”服务。3. 右键点击“Nginx”服务,选择“停止”来关闭服务。二、...

小米位置服务自动关闭怎么解决 打印机服务自动关闭怎么解决 win10打印服务总是自动关闭 win7打印机服务总是自动关闭 小米位置服务自动关闭 打印服务老是自动关闭怎么办 打印服务一直自动关闭 本地打印服务自动关闭 电脑自动关闭打印服务
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见白晶菊的预兆 求解:我用sai绘图,用了选择笔上色之后,铅笔或其他的笔上色就用不了了... 白晶菊花期(雏菊与白晶菊的区别) 白晶菊价格 sai工具的铅笔问题 她以盈利模式帮人刷卡套现,她套现的额度特别巨大一年能刷600多万我没有... ...调用“橡皮擦”工具?是否有这样一个工具自由擦除多余文字? 美术生真的好找工作吗 未来发展怎么样 美术生将来可以做什么工作? 阴部毛囊炎的症状 如何关闭nginx服务 system 不用重启 Nginx 也能更新服务吗 重启VPS服务器后还需要重启web服务器啊。但是找不到nginx安装的路径,请问怎么找到然后输入命令重启呢 笔记本电脑钉钉直播没有声音是怎么回事 wdcp的mysql nginx安装目录在哪 怎样重启服务 怎么把nginx服务设成开机自动启动 service nginx restart 重启快吗? windows系统下nginx如何开机启动,让nginx以服务形式启动 重启nginx服务器用哪个指令比较好 怎么重启服务器 502胶粘到手上了怎么办 皮肤上不小心沾了502胶怎么办 华为手机如何调整自动锁屏时间?这样操作即可简单设置 不小心把502胶水弄到手上怎么办? 请问,手上沾了502胶水怎么办? 自制麻酱烧饼的做法,自制麻酱烧饼怎么做好吃 自制麻酱卷怎么做好吃又简单,做法图解分 怎样自制麻酱小料呢? 自制芝麻酱的做法 纯素无添加的芝麻酱怎样做 怎样练腹肌(方法) 如何让windows10不更新 怎么才能让win10不自动更新系统 win10怎么才能不更新 win10系统怎么让他一直不更新 华为手机如何更改锁屏时间设置 如何让电脑系统不自动升级win10 win10怎么强制不更新 怎么让windows10停止更新 怎么让windows10不更新 win10怎么设置不更新 怎么让windows10不自动更新软件 win10 怎么让电脑不更新了 OPPO手机没有声音怎么解决? win10怎么设置才能不让更新 oppo手机麦克风没声音怎么设置? 如何让win10永远不更新 oppo手机怎么没声音了 如何设置windows10不自动更新 win10不想让它更新系统怎么弄? 怎样让windows10不更新