python - 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 执行(计划在今年升级,但现在不可能)。
解决方案
推荐阅读
- python - 复制 S3 存储桶中嵌套文件夹中的文件
- oracle-adf - 在 jdeveloper 中运行 ant 时包 oracle.jbo.server 不存在
- matlab - 对齐直方图
- tabulator - 无法让 Tabulator 呈现表格版本 4
- lua - 从表中获取所有数据名称
- javascript - 内部运行基本 Javascript 的 Html 文件不会在 ipad 上加载
- delphi - GetWindowThreadProcessId() IAT 挂钩:如何比较“dwProcessID”参数?
- apache-kafka - 何时应该将 Kafka Streams 应用程序拆分为多个应用程序?
- javascript - 'flash-messages' 不是已知元素 angular 6
- sqlite - 尝试打开 sqlite 数据库连接时出错