uwsgi 关闭重启 夯死问题

uwsgi 关闭重启 夯死问题,第1张

近期使用uwsgi启动django服务,发现在stop/reload uwsgi时会出现hangs问题,具体日志表现为: 在测试中发现无论用什么防线先uwsgi发送stop/reload信号,uwsgi都会进入一种假死状态,即不接收请求,也不结束进程。 期初以为uwsgi进程是在处理未完成的web请求。后来发现在没有任何请求时,uwsgi也会进入这种夯死状态。 首先说明问题的原因是因何而起。 出现这种夯死的问题是由于在uwsgi中使用了线程导致。 这里创建了一个最简单的django服务,并用uwsgi来启动。 首先,配置uwsgi为进程模式启动,这里创建了5个进程。 uwsgi配置文件如下: 现在来reload uwsgi服务,并查看uwsgi的日志。 结论:在uwsgi使用进程模式时,reload uwsgi不会出现夯死的问题。 前面以进程方式启动uwsgi没有出现夯死问题,那么现在就试一下以线程模式启动wusgi。这里启动了5个进程,每个进程中又包含了两个线程。 uwsgi配置文件如下: reload uwsgi服务,并观察日志输出。 结论:在uwsgi中使用线程模式也不会造成reload夯死的问题。 uwsgi的线程不会造成任何问题,那前文所指的线程究竟是什么? 现在uwsgi启动脚本中创建一个线程,在这种情况下尝试reload uwsgi并查看日志输出。 随后以线程方式启动uwsgi,并reload uwsgi。 结论:在uwsgi app中使用线程就导致reload夯死。 若场景中非要在uwsgi app中使用线程,可以通过配置 reload-mercy 和 worker-reload-mercy 两个参数避免夯死的问题。 uwsgi配置文件如下: 再次reload uwsgi服务,输出日志如下: 这里虽然也会出现NO MERCY问题,但是uwsgi在reload过程中并没有出现夯死的情况。

环境:

python3.6

centos 7

Django1.11

用Django写了个小网站,只能在自己本地跑一跑!这怎么行?听说可以部署在云服务器上,这样别人就可以访问了!

从哪儿开始?就从Django开始吧!老规矩,按步骤:

这里不讲Django项目实施过程,假设你已经写了一个Django项目,并且在本地 127.0.0.1:8000 能够跑起来。喏,给你个参考,项目大概长这样:

也就是项目目录下的settings.py文件,主要强调几个地方:

①关闭DEBUG模式:

②修改ALLOWED_HOSTS:

③配置静态文件存放路径:

修改好配置之后执行:

这个没什么说的。。。在自己的云服务器上装好这两个工具

安装好uwsgi后最好验证一下,验证方法:

创建一个test.py文件:

启动uwsgi服务器:

如果可以正常启动而不报错那就应该没问题,不放心的话再在终端验证一下:

在uwsgi.ini里进行如下配置:

找到nginx的配置文件夹,centos7的nginx配置文件在/etc/nginx下,该路径下有一个nginx.conf总配置文件,还有两个文件夹./conf.d、./default.d,我们将nginx.conf复制一份到conf.d文件夹下,命名为nginx.conf(或者项目名.conf)进行如下修改(根据中文注释进行相应配置即可):

进入uwsgi.ini文件夹下执行:

在终端执行:

参考资料:

刘江的博客

博客园

知乎问答

无名Blog

自强学堂Django教程

Django文档

empty_xl Blog


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6055638.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-13
下一篇 2023-03-13

发表评论

登录后才能评论

评论列表(0条)

保存