LINUX.ORG.RU
ФорумAdmin

Systemd - рестарт юнита в случае большого потребления памяти

 ,


0

1

Всем привет! Подскажите, реально ли реализовать средствами systemd автоматический рестарт сервиса, в случае, если он стал потреблять оперативной памяти больше заданного значения?

Либо если в целом в системе свободной памяти осталось менее заданного количества.

Пример юнита:

[Unit]
Description=broker
After=network.target

[Service]
Type=simple
User=serg
ExecStart=/opt/run/broker.py
Restart=always

[Install]
WantedBy=multi-user.target


Ответ на: комментарий от intelfx

Хосспаде, какой же системд классный. Лучшее что случилось с ленкусом.

anonymous
()
Ответ на: комментарий от intelfx

Либо если в целом в системе свободной памяти осталось менее заданного количества.

А это как сделать?

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

Сначала нужно определить, что такое «свободная память».

(Спойлер: хорошего определения на сегодняшний момент нет, поэтому каких-либо механизмов, которые бы это понятие использовали, тоже нет.)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Сначала нужно определить, что такое «свободная память».

ОЗУ+Своп-*занятое программами*
Кеш ФС учитывается по минимуму.

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от torvn77

тут ответ intelfx о том, что задача поставлена некорректно и так считать нельзя
тут возглас torvn77 о том, какое же этот ваш сустемудэ никчёмное поделие

и ведь так действительно считать нельзя, потому как бывают еще протечки, когда память занята никем, а «кэш учитывается по-минимуму» - воспаленная фэнтэзийная дичь.

systemd может пихать процесс в cgroup, где есть управление ограничениями, не больше. т.е. это задача декларативного характера, а не вычислительного.

SevikL ★★★★★
()
Ответ на: комментарий от SevikL

Ну htop же как то распределение памяти показывает...
Что systemd мешает сделать тоже самое?

и ведь так действительно считать нельзя, потому как бывают еще протечки, когда память занята никем, а «кэш учитывается по-минимуму» - воспаленная фэнтэзийная дичь.

А я вот так не считаю.
А кто то третий считает ещё как-то.
Вот мы и приходим к тому что свой rc на bash лучше декларативного конфига.

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

у тебя так забрало упало, что аж тредом промахнулся.

я в следующий раз заскриню htop на протёкшем сервере, и ты мне расскажешь, чем занята память. и причём тут rc на баше

SevikL ★★★★★
()
Ответ на: комментарий от SevikL

я в следующий раз заскриню htop на протёкшем сервере

Ок, ну значит надо ещё какое-то решение помимо htop.
Bash велик!

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

правильно. велик- велосипед. еще костыль добавить - вот и линукс готов

SevikL ★★★★★
()

Жёваный крот, это же какой-то запредельный звездец уже... Запускать говно, а потом настраивать другое говно, чтобы оно перезапускало первое говно если оно стало совсем говно.

Stanson ★★★★★
()
Ответ на: комментарий от torvn77

Если тебе хочется городить велосипеды на баше, это не значит, что все остальные должны заниматься тем же. Люди хотят удобных искоробочных решений.

Deleted
()
Ответ на: комментарий от SevikL

«кэш учитывается по-минимуму» - воспаленная фэнтэзийная дичь.

Тем не менее, нечто сходное реализовано в MemAvailable, где по сути оценивается, какую часть кэша можно безболезненно освободить

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id...

annulen ★★★★★
()
Ответ на: комментарий от Deleted

Ну и как, есть *искоробочное решение*?
Или это всё трёп лентяя и неосилятора баша?

И чем скрипт на баше не изкоробочное решение?
Причём самое настраиваемое и универсальное.

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

Ну и как, есть *искоробочное решение*?

systemd же

И чем скрипт на баше не изкоробочное решение?

Действительно, чем мясо, мука, яйца, соль, вода, лук, чеснок не изкоробочные пельмени?

Deleted
()
Ответ на: комментарий от annulen

Насколько помню, MemAvailable — это эвристическая оценка плюс-минус километр.

Assume at least half of the page cache, or the low watermark worth of cache, needs to stay.

И действительно.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от torvn77

Bash - скрипт конечно тоже можно написать, но, его нужно будет добавлять в крон, чтобы он периодически запускался и проверял сколько свободной памяти, либо писать для этого скрипта юнит Systemd:-)

Не проще ли сразу обойтись одним лишь Systemd, раз он это умеет?

Fess88
() автор топика
Ответ на: комментарий от Fess88

Так-то были еще костыли для описания правил cgroups и демон, который раскидывает процессы по группам. Я его юзал во времена Debian 7, когда i2p пускал на первой малине.

Что-то типа такого https://www.stableit.ru/2014/02/cgroup-debian-7.html

Radjah ★★★★★
()
Ответ на: комментарий от Fess88

но, его нужно будет добавлять в крон

Зачем его добпалять в корон, если его можно запустить как демона и переодически ставить на паузу командной sleep?

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

Каких ещё смешных нерабочих костылей предложите?

anonymous
()
Ответ на: комментарий от intelfx

Сначала нужно определить, что такое «свободная память».
хорошего определения на сегодняшний момент нет

Простите, а ООМ «в гости приходит» на основании чего?

anc ★★★★★
()
Ответ на: комментарий от anc

на основании «ты жирненький, тебя я убью первым» и oom_score.

SevikL ★★★★★
()
Ответ на: комментарий от anc

Простите, а ООМ «в гости приходит» на основании чего?

На основании того, что память уже кончилась (т. е. не удалось выделить чистую страницу).

Нетрудно заметить, что «мы умеем понимать, что память кончилась» — это более слабое условие, чем «мы умеем оценивать количество свободной памяти».

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.