LINUX.ORG.RU

Запуск Google Chrome в изолированном окружении

 , ,


1

1

Здравствуйте,

Прошу совета: хотелось бы мне запускать Google Chrome так, чтобы он не мог сжирать всю оперативную память, залезая в своп. Проц вроде не сильно жрёт, но в принципе хотелось бы количеством процессорного времени тоже управлять (хотя тут и renice поможет).

Нужен максимально user friendly способ, который легко повторить на любой системе, в которой я работаю. Извраты с docker/lxc тоже принимаются, но нужна не концепция, а всё-таки какое-то готовое решение тогда (концептуально итак понятно, что так оно будет работать).

Я пробовал ограничивать Chrome control group'ами, что-то нифига не вышло: ставлю лимит в 40Мб, положим, Хром реально жрёт все 500, и ему хоть бы хны. Опять же, скорее всего это просто кривые руки, и мне нужно просто почитать немного документации, но всё же... задача кажется тривиальной для Linux, поэтому меня не покидает ощущение, что я упускаю из виду какой-то простой способ, не предполагающий написания длинных витиеватых скриптов или установки всей инфраструктуры docker.

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

В идеале - сожрал Chrome больше лимита памяти - убиваем его к такой ядрёной фене, и дело с концом.

Нашёл такой вариант: https://askubuntu.com/questions/836469/install-cgconfig-in-ubuntu-16-04, но мой Linux Mint про все перечисленные конфиги ничего не знает, а cgconfigparser'а там просто нет (хотя все перечисленные в том совете пакеты поставил).

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 2)

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

Брутально конечно... но интересно. Согласен, можно сделать systemd-сервисом и при запуске системы фаерить прямо.

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

Кстати, по RSS'у наверное разумнее всё же убивать

DRVTiny ★★★★★
() автор топика

Поттерингофобией страдаешь? Если нет, то тебе сюда.

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

добавьте в crontab * * * * * этот онлайнер без while

anonymous
()

Буквально пару дней назад сам решал такой вопрос. 8 гигов памяти + 0 свопа = намертво зависшая машина, причем моментально, когда заканчивается память и ждать ООМ киллера можно 5-10 минут.

Сконфигурил cgroups на ubuntu 18.04.

root@username-xiaomi:/etc/openvpn# cat /etc/cgconfig.conf
group browsers {
    memory {
#       Allocate at most 1 GB of memory to tasks
        memory.limit_in_bytes = "3G";
        memory.soft_limit_in_bytes = "2500M";
    }
}
root@username-xiaomi:/etc/openvpn# cat /etc/cgrules.conf 
#Закоментированно, потомучто отказался от идеи
#username:/opt/google/chrome/chrome       memory      browsers
#username:/opt/google/chrome/google-chrome       memory      browsers

Потом запускаем команды для примения конфигов
root@username-xiaomi:/etc/openvpn# cgconfigparser -l /etc/cgconfig.conf
root@username-xiaomi:/etc/openvpn# cgrulesengd

Для проверки работоспособности выдели через cgroups 500метров памяти, перезапусти хром, он сразу упадет.

ну либо

root@username-xiaomi:/etc/openvpn# cgget browsers
выдаст информацию о группе.

Но я отказался после пары дней пользования. Почему? Ну потому что кроме хрома у меня еще обычно запущены FF, парочка контейнеров docker с базами, vs code, жрущий память. В итоге хоть хромого я и ограничил в потреблении, что кстати приводило к тому, что когда хром просил больше памяти, приходил OOM killer и убивал случайный процесс хрома. Иногда новая вкладка не открывалась, иногда умирала вкладка в которой фоном видео/музыка играются. Вобщем не смотря на то что аппетиты хрома я зарезал, но оказалось есть куча других жаждущих до памяти, которые ставят систему раком.

К чему я пришел. Выделил swap, пока 6 гигов, и включил модуль ядра zswap, который выделяет кусочек памяти и хранит в нем в сжатом виде, то что обычно летит в своп. Пока эксперементирую с таким вариантом.

Еще есть такая вещь как zram, можно создать несколько блочный устройств в оперативной памяти и назначить на них своп, своп тоже будет храниться в сжатом виде в оперативке. Но я пока поживу с zswap, посмотрю как оно.

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

Так же, как нам всем известно, по умолчанию линукс позволяет процессу запрашивать произвольное кол-во памяти(ну почти произвольное) куда больше чем есть в системе. И пока эта память процессу выдана но им не используется - все хорошо, но как только процесс попытается туда что-то записать, и если физически памяти нет, то система начинает ее искать, сбрасывать кэши и тд и тп, что и приводит иногда к тупнякам при ожидании ООМ киллера.

За это отвечает параметр ядра

# sysctl vm.overcommit_memory
vm.overcommit_memory = 0
0 - значение по-умолчанию, какой-то хитрый алгоритм принятия решения, можно ли удовлетворить запрос процесса на память, но так понимаю, почти всегда удовлетворяется

1 - никаких проверок, всегда выделять память.

2 - Максимальное кол-во памяти на все процессы считается по формуле. swap_size + ram_size*100/vm.overcommit_ratio

vm.overcommit_ratio по умолчанию - 50.

Т.е. можно попробовать поставить

vm.overcommit_memory = 2
vm.overcommit_ratio = 100
и тогда ядро не выделит памяти больше чем есть физически.

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