python ESL的内存消耗

python ESL的内存消耗,python,freeswitch,Python,Freeswitch,我已经编写了一个ESL服务器,它控制FreeSWITCH服务器上的调用流。问题是,连接关闭后,内存消耗不会降低到正常水平。在与服务器建立了数百个连接之后,它的内存消耗会消耗到GBs,因此必须强制杀死它。我已经指出了ESLconnection对象的问题。我尝试过使用del删除对象及其实例,但没有效果。代码如下: ivrServer.py import SocketServer from ESL import * import importlib import sys import threadin

我已经编写了一个ESL服务器,它控制FreeSWITCH服务器上的调用流。问题是,连接关闭后,内存消耗不会降低到正常水平。在与服务器建立了数百个连接之后,它的内存消耗会消耗到GBs,因此必须强制杀死它。我已经指出了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正在这里使用。

来自:

…将为每个请求创建一个新实例

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

设置()
中,您与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

我试着在finish中断开连接,甚至挂断,但似乎没有任何效果。我用最新的freeswitch版本替换了编译好的ESL库,但这只会减缓增加内存消耗的过程。在某一点上,它确实会继续使用大约30Gb的系统内存,我不得不终止这个进程。我建议发布更多的代码。如果没有更多的信息,人们很难提供帮助。在删除代码中使用的所有其他模块后,我将这个问题归结为ESL。所以,我想包含额外的代码是没有意义的。但是,我仍然会修改代码以反映实际的机制。我们有相同的问题,python会占用所有内存。我必须每两天重新启动一次,以释放python使用的所有内存。你有什么解决方案吗?我不得不用mod_Python替换Python ESL,它允许你在FreeSWITCH中运行Python代码,而不需要套接字,因为我无法找到问题的解决方案。