![uwsgi 关闭重启 夯死问题,第1张 uwsgi 关闭重启 夯死问题,第1张](/aiimages/uwsgi+%E5%85%B3%E9%97%AD%E9%87%8D%E5%90%AF+%E5%A4%AF%E6%AD%BB%E9%97%AE%E9%A2%98.png)
近期使用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
评论列表(0条)