簡體   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