uwsgi的一些奇怪问题
2018-08-30 本文已影响29人
十五倍压枪
问题背景
使用uwsgi部署flask应用时遇到几个奇怪的问题,找到了解决办法却暂时不知道原因,等待后续有时间排查,先记录解决办法
问题答案
Q.uwsgi部署flask应用,接收请求速度非常慢
接收请求(receive request)这个步骤,讲道理来说应该不可能成为性能瓶颈,但是我在日志记录中发现耗时达到了可怕的1s甚至2s,在工程中是以post传参的,由于项目的特殊原因所以post的参数长度相当之长,字符串长度将近2000.猜测是否可能是因为这个原因,事实上确实如果传的参数短一点就不会耗时这么久。但是传参的长度是我无法改变的,所以必须要找到解决办法
A.通过nginx转发请求后发现获取传参的效率正常了,猜测可能是uwsgi的解析bug,而经过nginx封装后的包uwsgi解析起来就不会有问题。后续继续排查
Q.uwsgi部署flask应用,压测时请求全部无响应
使用java的httpclient编写的压测工具进行压测,发现结果非常奇怪,有一半的请求是无响应的,每次都是刚好总请求数的一半。直接使用curl工具post方式请求是能得到正常结果的,请求数较少的情况下也会出现,排除是因为高并发出现的情况。
A.也是通过nginx转发请求后正常了,猜测uwsgi在解包封包上和常用的java系列工具有区别,导致无法正常解包封包。
Q.为了提高性能,加gevent=100参数报错
在uwsgi.ini中加上gevent参数报错,无法正常启动服务。
A.其实gevent不是固有参数,需要通过pip去安装gevent依赖