我编写了一个程序来处理大约 220 万条记录的一些数据。对于每条记录,它将经过一系列 20 次计算,总共需要大约 0.01 秒。为了让它运行得更快,我使用 Python 多进程,通常将我的数据分成 6 个块,并与主进程并行运行,将有效负载分配给进程并协调执行。顺便说一句,作为计算的结果,程序将向数据库写入大约 2200 万条记录。
我在 MacBookPro i7 2.2GHz 上运行它,8GB RAM 在 Python 3.2.2 上运行。数据位于本地 MySQL 服务器上。
该程序启动良好 - 以可预测的方式运行,CPU 平均利用率为 60-70%,我的 Macbook Pro 就像烤箱一样发热。然后它在运行大约 5 小时后变慢,每个核心的 CPU 利用率下降到平均 20%。我当时所做的一些观察是: - 每个 Python 进程消耗大约 480 MB 的实际 RAM 和大约 850 MB 的虚拟 RAM。这些繁重的进程总共有 6 个 - OSX 消耗的总虚拟内存(如 Activity Monitor 所示)约为 300GB
我怀疑性能下降是由于巨大的内存消耗和潜在的高页面交换。
我怎样才能更好地诊断这些症状?长时间运行大型内存对象的 Python 有什么问题吗?真的,我不认为运行 6 小时对于今天的技术来说是沉重的,但是我只有大约半年的 Python 经验,所以......我知道什么?!
谢谢!