繁体   English   中英

长时间运行的 python 程序内存使用情况

[英]long-running python program ram usage

我目前正在开展一个项目,其中 python 程序应该运行几天,基本上是无限循环,直到用户干预。 我观察到 ram 使用率(如 windows 任务管理器中所示)上升 - 缓慢但稳定。 例如,从程序开始时的 ~ 80 MB 到一天后的 ~ 120 MB。 为了更深入地了解这一点,我开始在整个程序执行过程中定期使用tracemalloc.get_traced_memory()记录分配的 memory。 output 被写入时序数据库(见下图)。

一天运行时的 tracemalloc 输出

一天运行时的 tracemalloc output

在我看来,程序所需的 memory 不会随着时间的推移而累积。 这如何适合 windows 任务管理器的 output ? 我是否应该通过我的程序 go 来搜索不断增长的数据结构? 非常感谢您提前

好的,事实证明答案是:不,这不是正确的行为,ram 的使用可以保持绝对稳定。 我已经对此进行了三周的测试,内存使用量从未超过 80 mb。 问题在于 influxdb v2 客户端的使用。 您需要关闭 write_api(通过“with ... as write_api:”语句隐式完成)和客户端本身(在下面的示例中通过“client.close()”显式完成)。 在我之前的版本中,memory 的使用量增加了,我只关闭了 write_api 而不是客户端。

client = influxdb_client.InfluxDBClient(url=self.url, token=self.token, org=self.org)
with client.write_api(write_options=SYNCHRONOUS) as write_api:
    # force datatypes, because influx does not do fluffy ducktyping
    datapoint = influxdb_client.Point("TaskPriorities")\
        .tag("task_name", str(task_name))\
            .tag("run_uuid", str(run_uuid))\
                    .tag("task_type", str(task_type))\
                        .field("priority", float(priority))\
                            .field("process_time_h", float(process_time))\
                                .time(time.time_ns())
    answer= write_api.write(bucket=self.bucket, org=self.org, record=datapoint)
client.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM