我正在运行一个Python脚本,该脚本使用无限循环内的Pandas函数来处理和处理数据。但是随着时间的推移,该程序似乎正在泄漏内存。
可悲的是,我无法确定内存使用量增加的根源。据我所知,所有数据(熊猫时间序列)都存储在对象Obj
中,我使用熊猫函数.memory_usage
和objsize函数get_deep_size()
跟踪该对象的内存使用情况。根据他们的输出,内存使用量应稳定在90-100 MB之间。除此之外,我看不到内存可以增加的地方。
知道python程序正在docker容器中运行可能很有用。
下面是脚本的简化版本,应阐明基本的工作原理。
from datetime import datetime
from time import sleep
import objsize
from dateutil import relativedelta
def update_data(Obj, now_utctime):
# attaining the newest timeseries data
new_data = requests.get(host, start=Obj.data[0].index, end=now_utctime)
Obj.data.append(new_data)
# cut off data older than 1 day
Obj.data.truncate(before=now_utctime-relativedelta.relativedelta(days=1))
class ExampleClass():
def __init__(self):
now_utctime = datetime.utcnow()
data = requests.get(host, start=now_utctime-relativedelta.relativedelta(days=1), end=now_utctime)
Obj = ExampleClass()
while True:
update_data(Obj, datetime.utcnow())
logger.info(f"Average at {datetime.utcnow()} is at {Obj.data.mean()}")
logger.info(f"Stored timeseries memory usage at {Obj.data.memory_usage(deep=True)* 10 ** -6} MB")
logger.info(f"Stored Object memory usage at {objsize.get_deep_size(Obj) * 10 ** -6} MB")
time.sleep(60)
任何有关内存增加的建议,或如何进一步研究,都将受到赞赏。
EDIT:查看图表,有可能在我截断之前会有尖峰,但是由于数据输入是稳定的,所以我不知道为什么它不能归一化,而是停留在较高点。然后,即使每个过程都没有另一个更宽泛的周期可以解释这一点,但是每隔第四个周期就会出现一次突然的下降...