分配大共享内存会导致“总线错误(核心转储)”

问题描述 投票:0回答:1

当分配大量共享内存(总 128GiB RAM 的 60%,使用了 3GiB)时,几秒钟后我收到“总线错误(核心转储)”,并且内存使用量上升。但如果我分配普通内存(在

b()
中),它就可以正常工作。

from multiprocessing.managers import SharedMemoryManager
import numpy as np

SIZE = 70462337280  # Exact size is not quite important

def spin():
    import time
    while True:
        time.sleep(60)

def a():
    with SharedMemoryManager() as smm:
        shm = smm.SharedMemory(size=SIZE)
        buf = np.ndarray((SIZE,), dtype=np.uint8, buffer=shm.buf)
        buf.fill(0)
        print("Done")
        spin()

def b():
    buf = np.empty((SIZE,), dtype=np.uint8)
    buf.fill(0)
    print("Done")
    spin()

# Bus error (core dumped)
a()

# Works fine
# b()

我检查了

/proc/sys/kernel/shmmax
,但这似乎没有限制。

cat /proc/sys/kernel/shmmax
18446744073692774399
python linux shared-memory coredump
1个回答
0
投票

事实证明,

/dev/shm
是一个默认大小限制为总RAM 50%的
tmpfs
(可以通过
findmnt -o AVAIL,USED /dev/shm
检查)。当空间用完时,会升起一个
BUS ERROR

这可以通过修改挂载选项来解决。有关详细信息,请查看 https://help.ubuntu.com/community/StricterDefaults 中的共享内存部分。

© www.soinside.com 2019 - 2024. All rights reserved.