1

我正在向 gevent 工作人员提供来自 gunicorn 的 MJPEG 流响应。一切正常,但是当客户端终止连接时,似乎 zeromq 订阅者没有被 GC 处理,只是继续接受图像数据。

这是 gunicorn 的内存使用情况:

内存泄漏

这是 wsgi 应用程序的源代码:

from gevent_zeromq import zmq


context = zmq.Context()


def app(environ, start_response):
    if environ['PATH_INFO'] == '/':
        subscriber = context.socket(zmq.SUB)
        subscriber.connect("ipc:///tmp/camera")
        subscriber.setsockopt(zmq.SUBSCRIBE, "")
        boundary = "--ipcamera"

        status = '200 OK'
        headers = [('Content-type', 'multipart/x-mixed-replace;boundary={}'.format(boundary))]
        start_response(status, headers)

        def get_frames():
            while True:
                yield subscriber.recv()

        return get_frames()

    status = '404 NOT FOUND'
    headers = []
    start_response(status, headers)
    return status

我正在使用 --max-requests 5 运行 gunicorn 来提供帮助,但显然不是解决方案。我什至不知道从哪里开始追捕罪魁祸首:/

4

1 回答 1

0

我能够通过删除 gevent_zeromq 并仅使用包含 gevent 支持的 pyzmq==13.1.0 来纠正此内存泄漏。

于 2013-09-17T15:50:11.837 回答