Утечка памяти в Python3 ifxPy - PullRequest
       24

Утечка памяти в Python3 ifxPy

0 голосов
/ 16 октября 2018

Я создал службу linux с помощью systemd.Мой сервис вызывает Python скрипт.Этот скрипт вызывает функцию в бесконечном цикле каждые 30 секунд. Я использую time.sleep(30) для цикла каждые 30 секунд.Мой скрипт открывает соединение с базой данных Informix, читает данные, вставляет данные в локальную MongoDB, вызывает веб-службы.

Но память службы никогда не уменьшается.Память увеличивается с каждым разом.Если я перезапускаю свою службу, память полностью освобождается.Служба запускается в 19 МБ и после 14 часов 555 МБ.

Вот мой код:

def populate_app():
    ifx_connection = IfxPy.connect(ifx_param, "", "")
    stmt = IfxPy.exec_immediate(ifx_connection, sql)
    dictionary = IfxPy.fetch_assoc(stmt) # Get data key / value

    ...

    IfxPy.close(ifx_connection)

while True:
    populate_app()
    time.sleep(30)

Возможно, утечка памяти вызвана request, ifxPy или pymongoбиблиотеки?

Я прокомментировал весь свой код в цикле и добавил только две строки в функцию populate_app:

ifx_connection = IfxPy.connect(ifx_param, "", "")
stmt = IfxPy.exec_immediate(ifx_connection, sql)

Таким образом, память не увеличивается.Затем я поставил эту строку:

dictionary = IfxPy.fetch_assoc(stmt) # Get data key / value

И утечка памяти снова здесь.Так что есть проблема с ifxPy, я думаю,

1 Ответ

0 голосов
/ 17 октября 2018

Можете ли вы попробовать освободить память набора результатов, вызвав free_result ()?

Что-то вроде:

....
....
# Bulk insert
if new_users:
    user.insert_many(new_users)
if error_user_data:
    user_error.insert_many(error_user_data)

IfxPy.free_result(stmt)
IfxPy.close(ifx_connection)
...