首页 > 解决方案 > 为什么在使用 multiprocessing.Process 和共享内存时内存使用量会突然飙升?

问题描述

我正在运行一个 Python ( python3) 脚本,该脚本同时生成(使用fork和不使用spawn)大量进程multiprocessing.Process(例如,其中的 20-30 个)。我确保所有这些过程都完成(.join())并且不会变成僵尸。但是,尽管我使用相同的随机种子运行相同的代码,但由于内存使用量在完全随机的时间出现巨大的峰值,我的工作崩溃了(内存使用量从请求的14GB上升到30GB200GB之间的随机值s 突然)。有时我的作业/脚本在运行 10 分钟后崩溃,有时在刚开始时崩溃),有时在运行 10 小时后崩溃。请注意,这个过程是确定性的,我可以重复它但不能重现崩溃,这很奇怪。我对这些进程中的每一个所做的是使用cv2.imread(每个可能占用 0.5MB 内存)从磁盘加载图像并将它们存储到共享内存中(mp.RawArray('f', 3*224*224)mp.Array('f', 3*224*224)) 我在运行进程之前创建的!我的代码每分钟在我运行它的服务器上创建和处理大约 1500-2000 个这些图像。看到有时只有 100-150 个图像从磁盘读取,但工作一开始就崩溃,因为当我将工作提交到使用 CentOS 的服务器时,我请求 25GB 的内存,这很烦人。

我已经尝试在我们的服务器上增加请求的内存(从 25GB 到 115GB),但是我的脚本很快或很晚并且在完全随机的时间崩溃。我注意到的另一件事是,尽管我生成了许多进程并.start()同时执行,但其中大多数进程直到先生成的进程首先完成后才开始运行。这是因为我在运行我的工作并使用 8 个内核时不需要很多内核(例如 30 个)。

我想知道人们是否有过类似的经历?我将不胜感激您的意见/建议。

标签: pythonmemory-leaksmultiprocessingshared-memoryslurm

解决方案


推荐阅读