奇怪的python性能降解很长时间并消耗了大量的内存足迹



我编写了一个程序,以将一些数据处理约220万个记录。对于每个记录,它将通过一系列20个计算,总计约0.01秒。为了使其运行速度更快,我使用Python多进程,将数据通常分为6个块,然后与主过程分配有效载荷到流程并协调执行并行运行。顺便说一句,由于计算,该程序将将约2200万记录写入数据库。

我正在MacBookPro i7 2.2GHz上运行,在Python 3.2.2上运行8GB RAM。数据位于本地MySQL Server上。

程序开始良好 - 以可预测的方式运行,CPU平均使用60-70%,而我的MacBook Pro则像烤箱一样加热。然后,它在运行约5小时后会减慢,而CPU利用率下降到每个核心的平均20%。我当时做出的一些观察是: - 每个Python过程都消耗约480 MB Real RAM和约850 MB虚拟RAM。总共有6个重型过程 - OSX消耗的总虚拟内存(如活动监视器所示)约为300GB

我怀疑性能降解是由于大量的记忆消耗和潜在的高页面掉期造成的。

如何更好地诊断这些症状?长时间使用大型内存对象运行的Python是否有任何问题?实际上,我认为今天的技术跑了6个小时,但是我只有大约半年的Python体验,所以...我知道什么?!

谢谢!

我猜想下降是因为它正在内存和退出内存。我认为问题不是程序运行的时间 - Python使用垃圾收集器,因此没有内存泄漏。

好吧,这不是完全 true。垃圾收集器将确保其删除所有无法触及的东西。(换句话说,它不会删除您可以访问的东西。)但是,它不够聪明,无法检测到何时将数据结构用于该程序的其余部分;您可能需要通过将其所有引用到None设置为正确工作。

  1. 您可以发布涉及的代码吗?

  2. 这是一个程序,您需要多次给定记录吗?您加载记录的订单对您的程序很重要吗?

  3. 如果Python进程只有几千兆字节分配了,那么为什么您有300 GB的二手内存?

最新更新