gunicorn是一个python Wsgi http server,最近项目服务出现了一些问题,阅读源码的几个提示:
- 各种不同的worker里无疑gevent方式是最高效的,每个进来的请求都转变为一个协程去异步的处理;
- requests_max参数在设定后,每个worker进程会在处理达到这个参数数量后的请求后会自己结束;
- master 管理所有的worker进程,如果当前活跃的进程少于worker_num,master会启动一个新的worker;
- 多个worker监听同一个socket,使用select或者epoll模式,据说因为Linux内核2.6后,不会出现“惊雷”现象
- gevent的工作worker下,每个worker可以设置最大连接的协程数量(worker_connecttions)
- 参数backlog指定了socket监听的最大缓存数目,当请求量积攒的数量大于backlog数值后,服务会丢掉(drop)后来的请求
那么问题是,按照这个理解,不应该在qps峰值为300的请求量下会出现服务拒绝连接的情况啊,可是现实是在开启4个worker(gevent)进程下,使用默认backlog(2000)以及指定requests_max为300的,单个请求平均服务处理时间为1秒多的情况下,还是会出现服务拒绝连接的情况。。。脑壳痛-。-
网友评论