@avion123678

Работа OOM killer?

В чем разница между ошибкой xmalloc cannot allocate n bytes и Killed (pid)?

И проводил тест на следующем скрипте:
#!/bin/bash

> report.log

arr=()
cnt=0

while true; do
    let "cnt++"
    arr+=({1..10})
    (( ($cnt % 100000) == 0 )) && echo "${#arr[*]}" >> report.log
done

Если получаю ошибку переполнения и убийство процесса oom killer: Killed (pid)
То просмотрев журнал (dmesg | egrep 'mem\.bash' | tail -n -2):
[74408.036383] Out of memory: Killed process 6526 (mem.bash) total-vm:1175296kB, anon-rss:657360kB, file-rss:0kB, shmem-rss:0kB, UID:1000
[74408.728476] oom_reaper: reaped process 6526 (mem.bash), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

Но если ошибка xmalloc, то записи о работе oom killer нет.
Почему не вызывается oom killer? На какой-то итерации цикла просисходит ошибка выделения, получается, что oom killer сработает только в случае, если процесс смог выделить память и при этом свободной памяти больше нет?
  • Вопрос задан
  • 339 просмотров
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
IMHO

ну xmalloc - это конкретно твой процесс попытался запросить еще памяти и у него это не вышло

а OOM killer - это когда в системе не хватает памяти (не обязательно твоему процессу, система многозадачная, в этот самый момент другие процессы могли тоже запросить память, или банально swap не успел отозваться), и ОС запускает OOM killer процесс, который выбирает какой бы процесс убить. Там алгоритм довольно простой - приоритет на убийство дается пользовательским процессам, потребляющим много памяти. Также алгоритм пытается убить как можно меньше процессов. В твоем случае видимо баш процесс потреблял больше всего, поэтому и оказался первым кандидатом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы