首页 > 解决方案 > Python(多处理)中的“无法分配内存”异常,但可用内存

问题描述

我有一些python代码会抛出“OSError:[Errno 12]无法分配内存”的问题。

但似乎我有足够的可用内存:(

它是一个复杂的 python 代码,我无法完整发布,但这里是调用 process.start() 的片段。我已经在 start() 前面放了一些内存统计信息的输出:

from multiprocessing import Process
self.log.info("mem-info: {}".format(psutil.virtual_memory()))
self.log.info("swap-info: {}".format(psutil.swap_memory()))
self.process.start()

而self.process是一个Process():

self.process = Process(name="lth" + laneid, target=self.run, args=())

内存输出如下所示:

mem-info: svmem(total=8375971840, available=5189591040, percent=38.0, used=2836029440, free=2907832320, active=4075716608, inactive=569372672, buffers=591847424, cached=2040262656, shared=37097472, slab=743190528)
swap-info: sswap(total=4291817472, used=0, free=4291817472, percent=0.0, sin=0, sout=0)

堆栈跟踪:

File "LaneThread.py", line 49, in start
    self.process.start()
File "/usr/lib/python2.7/multiprocessing/process.py", line 130, in start
    self._popen = Popen(self)
File "/usr/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

所以我有很多可用内存,但仍然得到“无法分配内存”。是否有任何其他可能导致此“无法分配内存”异常的原因?

我不知道我可以寻找什么来解决这个问题:(

代码由运行 Debian10 和 python 2.7 的 jenkins-node 执行(计划在今年升级,但现在不可能)。

标签: pythonmemorymultiprocessing

解决方案


推荐阅读