我正在运行一个Python(python3
)脚本,该脚本通过fork
生成(使用spawn
而不是multiprocessing.Process
)许多进程(例如,其中20-30个)同时。我确保所有这些过程都已完成(.join()
)并且不会成为僵尸。但是,尽管我使用相同的随机种子运行相同的代码,但由于在完全随机的时间内内存使用量猛增,我的作业还是崩溃了(内存使用量上升到 30GB之间的随机值突然从请求的 14GB 到 200GB 。有时我的作业/脚本在运行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()
,但是其中的大多数进程只有先完成较早产生的进程才开始运行。这是因为我在工作时并不需要使用很多核心(例如30个),而是使用8个核心。
我想知道人们是否经历过类似的经历?非常感谢您的评论/建议。