Bug 43622

Summary: systemd-oomd убивает сессию при полной загруженности памяти
Product: Sisyphus Reporter: obidinog <obidinog>
Component: systemdAssignee: Alexey Shabalin <shaba>
Status: REOPENED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: alimektor, arseny, mcpain, shaba, vercha, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
log none

Description obidinog@basealt.ru 2022-08-25 14:19:36 MSK
Created attachment 11397 [details]
log

Платформа:
kworkstation-10-x86-64

Стенд:
Lenovo-IdeaPad-Gaming-3-15ARH05:AMD Ryzen 5 4600H with Radeon Graphics

Пакет:
systemd-249.12-al3.x86_64

Шаги:
1)Запустить сервис systemd-oomd
2)Загрузить оперативную память >90%

Результат:
systemd-oomd убивает сессию

Ожидаемый результат:
systemd-oomd убивает приложение
Comment 1 obidinog@basealt.ru 2022-08-25 14:44:58 MSK
Дополнительно:

Вариант 1:
1) Открыть браузер Firefox
2) Открывать вкладки пока не забьется память
Результат: Убивается сессия

Вариант 2:
1) В консоли ввести  $ tail /dev/zero
2)В новом окне запускать пока не забьется память 
Результат: Убивается сессия

Вариант 3:
1)Открыть браузер Chromium
2)Открывать вкладки пока не забьется память
Результат: Убивается браузер Chromium (является ожидаемым результатом)
Comment 2 Sergey V Turchin 2022-08-25 16:57:15 MSK
(Ответ для obidinog@basealt.ru на комментарий #1)
> Результат: Убивается сессия
Самоубийство обычно называется crash или падение. Какой конкретно процесс?
Comment 3 Sergey V Turchin 2022-08-25 17:40:09 MSK
Прочитал лог, понятно.
Comment 4 obidinog@basealt.ru 2022-08-26 11:24:43 MSK
Дополнительно:

Проверено на ВМ Proxmox:
workstation-10-x86-64
education-10-x86-64
server-10-x86-64
education-10-x86-64-KDE

Сессия прибивается только на платформе kworkstation-10-x86-64.

На Education, Education KDE, Workstation - ничего не происходит, ничего не прибивается/не крашется.

На Server - работает корректно, прибивается только приложение(загружал систему Firefox'ом)
Comment 5 Sergey V Turchin 2022-08-26 11:43:04 MSK
(Ответ для obidinog@basealt.ru на комментарий #4)
> Сессия прибивается только на платформе kworkstation-10-x86-64.
> На Education, Education KDE, Workstation - ничего не происходит, ничего не
> прибивается/не крашется.
Убедитесь, что на всех тестируемых системах одинаковое ядро и systemd.
Comment 6 Sergey V Turchin 2022-09-23 15:25:47 MSK
Как выяснилось, проверка была на неправильно настроенной системе.
Не было пакета systemd-oomd-defaults
Comment 7 Vera Blagoveschenskaya 2022-09-23 15:40:20 MSK
(Ответ для Sergey V Turchin на комментарий #6)
> Как выяснилось, проверка была на неправильно настроенной системе.
> Не было пакета systemd-oomd-defaults

На стенде systemd-oomd-defaults установлен.
Comment 8 Sergey V Turchin 2022-09-23 15:43:20 MSK
> На стенде systemd-oomd-defaults установлен.
Значит, там баг не воспроизводится.
Comment 9 Evgeny Shesteperov 2022-11-23 17:49:06 MSK
(Ответ для Sergey V Turchin на комментарий #8)
> Значит, там баг не воспроизводится.

Воспроизводится.

Тестирую задание 309623 с версией systemd-249.13-alt1.

Делаю четыре последовательных теста с одним общим предусловием:

Стенд
=====

Воспроизводится стабильно на следующих виртуалках в системе виртуализации Proxmox Virtual Environment:

* p10-education-10-x86-64
* p10-education-10-x86-64-kde
* p10-kworkstation-10-x86-64
* p10-server-10-x86-64
* p10-workstation-10-x86-64

Реальное железо:

ПК ASUS Intel Celeron N3150 (система @dd3f058f894fd7852b39b9cdfc8af1b9@ alt-kworkstation-10.0-install-x86_64.iso)

Предусловие
===========

Установленные пакеты:

	# apt-get install -y systemd-oomd-defaults chromium firefox

Проверить наличие SWAP (необходим для корректной работы сервиса systemd-oomd):

	# swapon -s

Если значение пустое, то создать SWAP-файл:

	# fallocate -l 1G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo "/swapfile none swap sw 0 0" >> /etc/fstab && reboot

В параметрах ядра выставить значения ( в конце строки linux)

	psi=1 mem=2G

Проверить и запустить сервис systemd-oom

	# systemctl start systemd-oomd.service; sleep 5; systemctl status systemd-oomd.service

Тест 1
======

Запустить несколько раз (достаточно трёх) в графической сессии пользователя следующий сценарий:

$ zero_start=$(systemd-run --user tail /dev/zero 2>&1 | cut -f "4" -d " ") && \
systemctl status --user ${zero_start} && \
sleep 10 && \
systemctl status --user ${zero_start}

Ожидаемый результат
------------------- 

Сервис вышел с signal=KILL:

× run-rd73a64496ef14f82813030efa29d585a.service - /usr/bin/tail /dev/zero
     Loaded: loaded (/run/user/500/systemd/transient/run-rd73a64496ef14f82813030efa29d585a.service; transient)
  Transient: yes
     Active: failed (Result: signal) since Wed 2022-11-23 16:27:13 MSK; 49s ago
    Process: 3797 ExecStart=/usr/bin/tail /dev/zero (code=killed, signal=KILL)
   Main PID: 3797 (code=killed, signal=KILL)
        CPU: 7.645s

На KWorkstation вышло уведомление:

Процесс /user.slice/user-500.slice/user@500.service/app.slice/run-r560746cf8219456e9c13688829d89580.service был завершён. Причина: memory-used

На Education KDE может выйти сообщение об нехватке памяти.

Фактический результат
---------------------

На виртуалках первый раз отрабатывает согласно ожидаемому поведению, во второй раз systemd-oomd убивает сессию пользователя, в логах сервиса systemd-oomd:

	Killed /user.slice/user-0.slice/session-5.scope due to memory used (2023297024) / total (2077696000) and swap used (1051398144) / total (1073737728) being more than 90.00%

На реальном железе на KWorkstation результат соответствует ожидаемому.

Тест 2
======

В терминале выполнить от рута:

# tail /dev/zero

Ожидаемый результат
-------------------

Сообщение в терминале:

	Убито

Отсутствие падения сессии.

Фактический результат
---------------------

Ожидаемый результат появляется через раз, обычно systemd-oomd убивает сессию пользователя, в логах сервиса systemd-oomd:

	Killed /user.slice/user-500.slice/session-4.scope due to memory used (2016489472) / total (2073276416) and swap used (7728721920) / total (8556376064) being more than 90.00%

Тест 3
======

Открыть Firefox.

Запустить в терминале следующий сценарий:

$ cat > firefox.sh << 'EOF'
for i in {1..100}
do
    firefox --new-tab youtube.com
    sleep 3
done
EOF

$ chmod +x firefox.sh

$ ./firefox.sh

Примечание: повторить запуск скрипта пока не отработает systemd-oomd.

Примечание 2: можно выбрать в качестве браузера Chromium, результат будет тот же.

Ожидаемый результат
-------------------

systemd-oomd прервал работу браузера. Появилось уведомление о том, что прервано и причина.

Фактический результат
---------------------

systemd-oomd прервал работу сессии. В логах следующее сообщение

ноя 23 17:15:50 asus-intel-celeron-n3150 systemd-oomd[3122]: Killed /user.slice/user-500.slice/session-4.scope due to memory used (2016489472) / total (2073276416) and swap used (7728721920) / total (8556376064) being more than 90.00%

Вывод
=====

Из этого можно сделать вывод, что данный сервис (systemd-oomd) отрабатывает через раз, а с браузерами и вовсе не отрабатывает как надо.

Переоткрываю, так как воспроизводится и с systemd-249.12-al3.
Comment 10 Sergey V Turchin 2022-11-23 17:59:54 MSK
На Workstation K 10.1 воспроизводится?
Comment 11 Evgeny Shesteperov 2022-11-24 12:19:25 MSK
(Ответ для Sergey V Turchin на комментарий #10)
> На Workstation K 10.1 воспроизводится?

Воспроизводится. Проверено для версий:

systemd-249.12-al3
systemd-249.13-alt1

Стабильно воспроизводится на виртуалках.

Также заметил при запуске на реальном стенде в терминале Konsole:

	# tail /dev/zero

Выводится уведомление о нехватке памяти сначала для plasmashell, потом для Konsole, после чего systemd-oomd убивает сессию.

С заданием на реальном стенде ошибка Killed /user.slice/user-500.slice/session-N.scope ещё реже. Вот пример лога с заданием:

# journalctl -b -u systemd-oomd --no-pager
	ноя 24 12:02:25 auditcraft systemd[1]: Starting Userspace Out-Of-Memory (OOM) Killer...
	ноя 24 12:02:26 auditcraft systemd[1]: Started Userspace Out-Of-Memory (OOM) Killer.
	ноя 24 12:03:24 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-r6ce8882a59dc4bd088a0c608140c7958.service due to memory used (1971056640) / total (2073276416) and swap used (1018953728) / total (1073737728) being more than 90.00%
	ноя 24 12:03:38 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-r0a392b949e0a44f7b0171452a872b66a.service due to memory used (2005454848) / total (2073276416) and swap used (1017479168) / total (1073737728) being more than 90.00%
	ноя 24 12:03:49 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-rd775104fa34e4e8fbccf99d803d92a4a.service due to memory used (2012405760) / total (2073276416) and swap used (968065024) / total (1073737728) being more than 90.00%
	ноя 24 12:04:56 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-r8ec21758f626468b8f61764cb9196865.service due to memory used (2012176384) / total (2073276416) and swap used (998649856) / total (1073737728) being more than 90.00%
	ноя 24 12:05:07 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-re6d8773ccadf403abd00ff6ea6cea2b7.service due to memory used (1996603392) / total (2073276416) and swap used (984805376) / total (1073737728) being more than 90.00%
	ноя 24 12:05:18 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-rb96ccbc9bd734372bcaba216ffd6f988.service due to memory used (2012725248) / total (2073276416) and swap used (991174656) / total (1073737728) being more than 90.00%
	ноя 24 12:05:29 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-r569394d56295414e8d7073830b6d81f2.service due to memory used (2009260032) / total (2073276416) and swap used (1011372032) / total (1073737728) being more than 90.00%
	ноя 24 12:05:41 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/user@500.service/app.slice/run-rb6d2cabc06914e90b25c337e746e15df.service due to memory used (1993711616) / total (2073276416) and swap used (1022730240) / total (1073737728) being more than 90.00%
	ноя 24 12:05:56 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/session-2.scope due to memory used (2004508672) / total (2073276416) and swap used (974004224) / total (1073737728) being more than 90.00%
	ноя 24 12:07:52 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/session-7.scope due to memory used (1977479168) / total (2073276416) and swap used (981352448) / total (1073737728) being more than 90.00%
	ноя 24 12:17:04 auditcraft systemd-oomd[3029]: Killed /user.slice/user-500.slice/session-9.scope due to memory used (2012143616) / total (2073276416) and swap used (987901952) / total (1073737728) being more than 90.00

Так что, считаю, что ошибка актуальна.
Comment 12 Sergey V Turchin 2022-11-24 13:25:49 MSK
(Ответ для Evgeny Shesteperov на комментарий #11)
> Выводится уведомление о нехватке памяти
А сколько всего там памяти?
Comment 13 Evgeny Shesteperov 2022-11-24 13:39:37 MSK
(Ответ для Sergey V Turchin на комментарий #12)
> (Ответ для Evgeny Shesteperov на комментарий #11)
> > Выводится уведомление о нехватке памяти
> А сколько всего там памяти?

Согласно предусловию устанавливается ограничение параметром ядра размером 2GB:

> В параметрах ядра выставить значения ( в конце строки linux)
>	psi=1 mem=2G

На реальной машине: 8GB RAM, 8GB SWAP

Воспроизводится легко, если отключить SWAP по умолчанию и сделать SWAP, как предусловии:

> Проверить наличие SWAP (необходим для корректной работы сервиса systemd-oomd):
>	# swapon -s
> Если значение пустое, то создать SWAP-файл:
>	# fallocate -l 1G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo "/swapfile none swap sw 0 0" >> /etc/fstab && reboot

В итоге получается: 2GB RAM, 1GB SWAP. При 8GB SWAP просто долго ждать при проверке с Chromium/Firefox, пока воспроизведётся (минут 15-20).