繁体   English   中英

python ESL的内存消耗

[英]Memory consumption of python ESL

我写了一个ESL服​​务器,它控制FreeSWITCH服务器上的呼叫流程。 问题在于,连接关闭后,内存消耗不会减少到正常水平。 与服务器建立数百个连接后,其内存消耗将达到GB,并且必须强行杀死它。 我已查明问题是ESLconnection对象。 我尝试使用del删除对象及其实例,但无济于事。 代码如下:

ivrServer.py

import SocketServer
from ESL import *
import importlib
import sys
import threading
import traceback
import signal
import time

class ESLRequestHandler(SocketServer.BaseRequestHandler):
    #svr_ivr_log = None
    def setup(self):
        fd = self.request.fileno()
        self.con = ESLconnection(fd)
        self.svr_ivr_log.info("Client connected: %s" % str(self.client_address))

    def handle(self):
        ivr_script = importlib.import_module('script')
        ivr_script = reload(ivr_script)
        ivr_script.process(self.con)

    def finish(self):
        self.con.disconnect()

ESLRequestHandler.svr_ivr_log = logging('server')

SocketServer.ThreadingTCPServer.allow_reuse_address = True
server = SocketServer.ThreadingTCPServer(('', 9090), ESLRequestHandler)
server.serve_forever()

script.py:

def process(con):
    info = con.getInfo()
    uuid = info.getHeader('unique-id')
    con.execute('hangup', "NORMAL_CLEARING", uuid)

这将需要为您的Linux版本编译的freeswitch的ESL模块。 让我知道是否需要解释执行此操作的过程。 这里使用了Python2.7。

SocketServer doc中

...为每个请求创建一个新实例。

每个请求都会创建一个新的ESLRequestHandler实例。

setup() ,您建立了与FreeSWITCH服务器的连接,但在处理完请求后再也不会关闭它。 我怀疑这是内存泄漏的根源。

要关闭与FreeSWITCH服务器的连接,请执行以下操作:

class ESLRequestHandler(SocketServer.BaseRequestHandler):
    #svr_ivr_log = None
    def setup(self):
        fd = self.request.fileno()
        self.con = ESLconnection(fd)
        self.svr_ivr_log.info("Client connected: %s" % str(self.client_address))

    def handle(self):
        pass  # your code for interacting with the FreeSWITCH server here

    def finish(self):
        self.con.disconnect()  # close the connection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM