这是在 Hyper-V 机器上。我已将最小 RAM 设置为 512,最大 RAM 设置为 2048。主机的 RAM 绰绰有余。
Linux 在 Hyper-V 上存在动态 RAM 问题吗?我似乎无法弄清楚我们为什么会遇到内存问题。
编辑:我也禁用了动态 RAM,并将最小/启动设置为 2048MB。仍然因内存不足问题而崩溃。
编辑:
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 1869 1240 629 0 27 1049
-/+ buffers/cache: 162 1706
Swap: 991 6 985
那是在编译期间。我会发布失败信息。上次我这样做时,系统崩溃时仍有大量可用 RAM。
PS:我注意到,如果我尝试make -j
使用更多的处理器(12),编译器几乎会立即崩溃。
以下是使用 make -j 选项的 4GB Dedicated 示例。编译不久后就崩溃了make -j
。
EDIT3:我终于能够在不使用 -j 选项的情况下编译内核,但 Hyper-V 为何会给我这样的内存错误,这很奇怪。仍在进行一些调试。
答案1
make -j
(不带参数-j
)对启动的命令数量没有上限。它会尽可能地并行化,而不仅限于内核数量(正如问题所暗示的那样)。
make -j 12
(或者可能少于 12,具体取决于每个进程对内存的占用情况)在您的情况下可能是更合理的命令。
从man 1 make
:
-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously. If
there is more than one -j option, the last one is effective. If
the -j option is given without an argument, make will not limit
the number of jobs that can run simultaneously.