gpt4 book ai didi

Python os.fork OSError : [Errno 12] Cannot allocate memory (but memory not the issue)

转载 作者:IT王子 更新时间:2023-10-28 23:31:27 26 4
gpt4 key购买 nike

我有类似的问题:Python subprocess.Popen "OSError: [Errno 12] Cannot allocate memory"

我有一个守护进程可以正常运行几分钟,然后无法通过 popen2.Popen3() 运行 shell 程序。它产生 20 个线程。内存似乎不是问题。这是机器上唯一运行的程序,它有 2G 的 RAM,它使用的内存不到 400M。我一直在记录 ru_maxrss,这只有 50M(在引发 OSError 之前和之后)。

ulimit -a:

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15962
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15962
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

我也一直在看 free -mls/proc/$pid/fd | wc -l 在它运行时,并且这些似乎都不表示资源耗尽。下面是典型的 free -m 运行时:

             total       used       free     shared    buffers     cached
Mem: 2003 374 1628 0 46 154
-/+ buffers/cache: 173 1830
Swap: 283 0 283

... fd 计数在 90-100 左右。

主机是 Ubuntu 12.04(服务器 jeos - 最小 vm)、Python 2.7.3,在 VMWare 主机上运行。

所以我想知道:接下来我该怎么做才能诊断出失败的原因?我可以收集更多资源统计信息吗?我需要降到 strace 的级别吗?

最佳答案

假设:如果您的虚拟机是 32 位的,那么您的地址空间可能会用完。

不是内存:地址空间。让我解释一下:在 Linux 中,很多东西(IO、视频卡、内存映射文件)会耗尽地址空间,而不必消耗相应数量的主内存。

下面是相关问题的解释:

http://us.download.nvidia.com/XFree86/Linux-x86/331.89/README/knownissues.html

(查找“X86 平台上的内核虚拟地址空间耗尽”部分,使用 dmesg 测试是否是这种情况)

mmap 结果中的

ENOMEM 错误很可能意味着“地址空间不足”的情况,而不仅仅是“内存不足”,尽管我不确定如何在 CPython 中诊断。如果你的系统上有一些大文件 mmap 被运行在系统上的任何进程编辑,那么......

关于Python os.fork OSError : [Errno 12] Cannot allocate memory (but memory not the issue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com