uwsgi和django(uwsgi代理Django时,向django的路由函数发送请求时,处理时间很长,如何解决!!)

本文目录
- uwsgi代理Django时,向django的路由函数发送请求时,处理时间很长,如何解决!!
- nginx uwsgi wsgi django 这些东西究竟是什么关系
- uwsgi 关闭/重启 夯死问题
- uwsgi选定python版本
uwsgi代理Django时,向django的路由函数发送请求时,处理时间很长,如何解决!!
配置uwsgi都不发,日志也没有,这面排查太大。
uwsgi.ini 配置如下
。。。。
***隐藏网址***
buffer-size=65536
proccess=4
threads = 2---每个进程要开启2个以上的线程,
vacuum=true
daemonize=/opts/log/wsgi.log
这个应用到配置,然后cat日志一下看看。
nginx uwsgi wsgi django 这些东西究竟是什么关系
1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx,
***隐藏网址***
如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
3要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某些情况
1 安全问题,程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。
2负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
3静态文件问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。
uwsgi 关闭/重启 夯死问题
近期使用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过程中并没有出现夯死的情况。
uwsgi选定python版本
这个应该与uwsgi关系不大。首先你计算机上肯定是安装了两个python,uwsgi如果调用的是python2.6(也许只是显示的python2.6),可能是它自带的(可能性不大),也可能是自己搜索出来的(可能性也不大)。也有可能是显示错了,实际上就是python2.7.3。
按理与uwsgi关系不大,应该是django启动的时候使用的python。如果你是在linux下,那你找到uwsgi的这个启动用户。在这个用户环境下,也许因为path中的先后顺序不同,导致使用的python的路径并不是python2.7的。
如果你是在windows下,就要检查你是否使用了多个python,以前是否使用了virtualenv这个工具。
不过如果你用了uwsgi自带了基于django的监控。那么django的启动python版本可能受受控于uwsgi的python版本了。

更多文章:
evaluation状态是好是坏(evaluation和review有什么区别)
2025年12月27日 22:30
idea写的代码eclipse能用吗(怎么把Intelij IDEA的工程变为Eclipse工程,希望有人解答)
2025年6月9日 15:00
insert命令注意哪些语法问题(sql语句中INSERT的使用问题)
2026年8月12日 10:30
fundamental音标(英语leap forward怎么翻译)
2025年11月21日 04:00
scum建房子(SCUM0.8版本悬空房建造攻略悬空房怎么建)
2026年7月11日 03:30
virtue中文(谁知道V打头的英文单词呀 要加中文意思越多越好 谢谢谢谢)
2025年12月17日 23:00
application是什么类型(Excel VBA中APPLICATION是什么意思)
2026年2月18日 21:30
疫情期间应急方案企业模板(公司疫情防控措施方案范文(精选5篇))
2026年1月3日 21:00
es6 阮一峰(来自一位react新手的react入门须知)
2025年8月26日 09:30
common翻译(common ,ordinary,general,usual,normal,natural区别)
2026年2月18日 14:30
discuz自适应模板下载(请问discuz论坛下载的模板安装问题)
2025年9月17日 01:45









