Flask Socketio Eventlet Redis RQ CPU固定

时间:2018-10-12 04:37:58

标签: flask redis socket.io

我们最近将Flask-RQ2(RQ + Redis)添加到了Flask-SocketIO应用程序中。我们正在使用Eventlet驱动套接字io。目的是让Websocket将繁重的工作交给后端。

不过,在添加RQ代码时,我们的流程已开始定期固定其核心并完全降低性能。重新启动会将应用程序保存一小段时间,但只能保存一小会儿。

我的假设是,eventlet未能按预期的那样成功完成redis.connection.socket的猴子补丁,因此它仍然是一个阻塞的暗示并驱动负载。但是,我们按照here-import eventlet的规定使用eventlet,而eventlet.monkeypatch()是我们主模块的第二行。我们使用socketio.run(APP, debug=APP.config['DEBUG'], host=APP.config['HOST'], port=APP.config['PORT'])

运行该应用程序

运行strace尝试找出挂住该进程的过程时,我看到类似wait4(11, 0x7ffe0b2689fc, WNOHANG, NULL) = 0的内容。另外(也许不相关),当CPU处于运行状态时,我在lsof输出中看到了两个标记为[eventpoll]的fds,而一个快乐的进程只显示了一个。

文件描述符泄漏是我对WNOHANG消息的一种解释(请参阅here),但是除了多个[eventpoll] fds之外,我看不到任何危险的东西。

任何想法或建议将不胜感激!我们正在使用Python 3.6,flask 0.12.2,flask-rq2 18.0,flask-socketio 3.0.1和redis 2.10.6。

0 个答案:

没有答案