我的Python代码在需要时使用列表、字典和元组存储动态数据,导致进程内存动态增长。虽然这些动态数据在变量中被清除,但是内存并没有降下来。
因此,我认为存在内存泄漏,并使用gc.collect()方法收集所有未释放的内存。但是,即使变量中没有数据,我也无法将内存降至最低。
我的Python代码在需要时使用列表、字典和元组存储动态数据,导致进程内存动态增长。虽然这些动态数据在变量中被清除,但是内存并没有降下来。
因此,我认为存在内存泄漏,并使用gc.collect()方法收集所有未释放的内存。但是,即使变量中没有数据,我也无法将内存降至最低。
所以,只有通过终止进程才能确保释放其内存。例如,一个长时间运行的服务器可以定期将其状态快照保存到磁盘并关闭(同时有一个小的看门狗进程,系统或自定义,监视它并重新启动它)。如果您知道下一次操作将花费大量的内存但时间很短,通常可以使用 os.fork
在子进程中执行需要大量内存的工作,并在子进程终止时通过管道将结果(如果有)返回给父进程。等等。
我们需要考虑的是多大的内存?Python本身占用一定量的内存,可能高达30到40 MB。如果它比这还要大,并且没有被回收,那么你就有了内存泄漏。只有没有引用的垃圾才能被回收,但你的额外内容仍然被引用。进行内存分析,看看发生了什么。