Ali*_*ley 13 python linux memory out-of-memory
我有类似的问题:Python subprocess.Popen"OSError:[Errno 12]无法分配内存"
我有一个守护程序进程运行好几分钟然后无法通过运行shell程序popen2.Popen3().它产生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
Run Code Online (Sandbox Code Playgroud)
我一直在观看free -m,ls /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
Run Code Online (Sandbox Code Playgroud)
...而且fd计数大约是90-100.
主机是在VMWare主机上运行的Ubuntu 12.04(服务器jeos - minimal vm),Python 2.7.3.
所以我想知道:我接下来要做什么来诊断为什么会失败?我可以收集更多的资源统计数据吗?我需要达到strace的水平吗?
假设:如果您的虚拟机是 32 位的,您可能会耗尽地址空间。
不是内存:地址空间。让我解释一下:在 Linux 中,许多东西(IO、显卡、内存映射文件)都会占用地址空间,但不一定消耗相应数量的主内存。
以下是相关问题的解释:
http://us.download.nvidia.com/XFree86/Linux-x86/331.89/README/knownissues.html
(查找“X86平台上的内核虚拟地址空间耗尽”部分,用于dmesg测试是否是这种情况)
ENOMEM结果中的错误mmap很可能意味着“地址空间不足”的情况,而不仅仅是“内存不足”,尽管我不确定如何在 CPython 中诊断这一点。mmap如果您的系统上运行的任何进程有一些大文件,那么..