Python3 ifxPy 内存泄漏
Python3 ifxPy memory leak
我使用 systemd 创建了一个 linux 服务。我的服务调用 Python 脚本。该脚本每 30 秒在无限循环中调用一个函数,我使用 time.sleep(30)
每 30 秒循环一次。我的脚本在 Informix 数据库上打开一个连接,读取数据,在本地插入数据 MongoDB,调用 Web 服务。
但是服务内存不会减少。内存每次都增加。如果我重新启动我的服务,内存将完全释放。服务开始时为 19MB,14 小时后为 555MB。
这是我的代码:
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 有问题
您可以尝试释放结果集内存调用 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)
我使用 systemd 创建了一个 linux 服务。我的服务调用 Python 脚本。该脚本每 30 秒在无限循环中调用一个函数,我使用 time.sleep(30)
每 30 秒循环一次。我的脚本在 Informix 数据库上打开一个连接,读取数据,在本地插入数据 MongoDB,调用 Web 服务。
但是服务内存不会减少。内存每次都增加。如果我重新启动我的服务,内存将完全释放。服务开始时为 19MB,14 小时后为 555MB。
这是我的代码:
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 有问题
您可以尝试释放结果集内存调用 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)