LINUX.ORG.RU

История изменений

Исправление Stanson, (текущая версия) :

Ну ЕМНИП в контейнере ты можешь подкинуть свой файл свопа вместо системного. Если в контейнере только одна софтина, то этот своп будет только её. Правда, по-моему, при этом основной системный своп тоже используется, так что надо выключить системный. Давненько я пытался ограничить браузеры в ужоре памяти таким способом, может сейчас что и изменилось в лучшую сторону в контейнеризации и стало можно запретить системный своп в контейнере.

На самом деле проблема не в этом. Насколько я понял, всякая блоатварь типа браузеров или поделий на электроне или жабе пытается выяснить сколько в системе всего физической памяти и старательно пытается выжрать (застолбить за собой) большую часть оной. Например браузер на машине с 8Гб через некоторое время после запуска выжрет в 2 раза меньше памяти чем браузер на машине с 16Гб при прочих равных (количество и объём открытых вкладок). Браузер в итоге, конечно сожрёт всю имеющуюся память, но это будет позже. Единственный способ бороться с этим - запускать браузер в виртуалке, но она сама сразу сожрёт весь выделенный браузеру кусок.

Если запустить браузер на машине с 16Гб под firejail с rlimit-as 8g то браузер всё равно будет пытаться выжрать свои 3/4 от 16Гб и его дочерние процессы начнут просто падать из-за невозможности получить больше 8Гб от системы. Такой себе вариант, при том, что на машине с 8Гб оно вполне себе удовлетворяется 3/4 от 8Гб без падений.

То же самое может относится и к другому софту.

Наилучшее решение этого - ковырнуть ядро (proc и sys) и всякие ACPI штуки чтобы можно было для любого процесса или контейнера подставить фиктивные данные о физической памяти в машине.

Выделение приватного свопа процессу приведёт лишь к тому, что физическая память забьётся буферами приватного свопа в том же объёме, а вовсе не к сокращению ужора памяти, ибо блоатварь обнаружила что в машине есть 8/16/32Гб физической памяти и она хочет их все хоть тушкой, хоть чучелком, поэтому смысла в таком подходе нету.

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

Ну а с нормальным софтом такой проблемы просто нет - он съедает по ходу столько, сколько реально требуется для выполнения задачи, а не столько сколько сможет ради каких-то там вымышленных эффективностей и скоростей.

Исходная версия Stanson, :

Ну ЕМНИП в контейнере ты можешь подкинуть свой файл свопа вместо системного. Если в контейнере только одна софтина, то этот своп будет только её.

На самом деле проблема не в этом. Насколько я понял, всякая блоатварь типа браузеров или поделий на электроне или жабе пытается выяснить сколько в системе всего физической памяти и старательно пытается выжрать (застолбить за собой) большую часть оной. Например браузер на машине с 8Гб через некоторое время после запуска выжрет в 2 раза меньше памяти чем браузер на машине с 16Гб при прочих равных (количество и объём открытых вкладок). Браузер в итоге, конечно сожрёт всю имеющуюся память, но это будет позже. Единственный способ бороться с этим - запускать браузер в виртуалке, но она сама сразу сожрёт весь выделенный браузеру кусок.

Если запустить браузер на машине с 16Гб под firejail с rlimit-as 8g то браузер всё равно будет пытаться выжрать свои 3/4 от 16Гб и его дочерние процессы начнут просто падать из-за невозможности получить больше 8Гб от системы. Такой себе вариант, при том, что на машине с 8Гб оно вполне себе удовлетворяется 3/4 от 8Гб без падений.

То же самое может относится и к другому софту.

Наилучшее решение этого - ковырнуть ядро (proc и sys) и всякие ACPI штуки чтобы можно было для любого процесса или контейнера подставить фиктивные данные о физической памяти в машине.

Выделение приватного свопа процессу приведёт лишь к тому, что физическая память забьётся буферами приватного свопа в том же объёме, а вовсе не к сокращению ужора памяти, ибо блоатварь обнаружила что в машине есть 8/16/32Гб физической памяти и она хочет их все хоть тушкой, хоть чучелком, поэтому смысла в таком подходе нету.

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

Ну а с нормальным софтом такой проблемы просто нет - он съедает по ходу столько, сколько реально требуется для выполнения задачи, а не столько сколько сможет ради каких-то там вымышленных эффективностей и скоростей.