Назад | Перейти на главную страницу

Сбой компиляции ядра на Hyper-V из-за проблем с памятью

Это на машине Hyper-V. Я установил минимальную RAM на 512 и максимальную на 2048. На хост-машине более чем достаточно RAM.

Есть ли у Linux проблема с динамической оперативной памятью на Hyper-V? Кажется, я не могу понять, почему у нас проблемы с памятью.

РЕДАКТИРОВАТЬ: Я также просто отключил динамическую оперативную память и установил минимальное / стартовое значение до 2048 МБ. По-прежнему вылетает из-за нехватки памяти.

РЕДАКТИРОВАТЬ:

[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

Это во время компиляции. Я отправлю сообщение о неудаче. В прошлый раз, когда я сделал это, в системе все еще было достаточно свободной оперативной памяти после сбоя.

PS: Я заметил, что если я попробую использовать make -j при использовании большего количества процессоров (12) компиляция завершится почти мгновенно.

Вот пример выделенного 4 ГБ с использованием опции make -j. Компиляция вылетела сразу после make -j.

EDIT3: я наконец смог скомпилировать ядро ​​без использования опции -j, но почему Hyper-V выдает мне такие ошибки памяти, как это странно. Все еще занимаюсь отладкой.

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.