我通过使用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有问题
答案 0 :(得分:1)
您可以尝试释放调用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)