[devel] OOM OMG OMG...

Paul Wolneykien manowar на altlinux.org
Вт Фев 1 13:58:53 MSK 2022


В Tue, 1 Feb 2022 02:55:31 +0300
Andrey Savchenko <bircoph на altlinux.org> пишет:

> On Tue, 1 Feb 2022 02:26:57 +0300 Paul Wolneykien wrote:
> > В Tue, 1 Feb 2022 00:55:18 +0300
> > "Alexey V. Vissarionov" <gremlin на altlinux.org> пишет:
> >   
> > >  >> P.S. Для браузера 32 бит вполне хватает 2GB RAM + zswap
> > >  >> или 3 GB RAM, если 100500 вкладок не открывать.    
> > > 
> > > Ага. А когда нужно запустить что-то еще - обязательно завершить
> > > этот процесс, чтобы он память не жрал.  
> > 
> >   И тут мы возвращаемся к другому вопросу: как, всё-таки, настроить
> > OOM-killer так, чтобы он не отправлял систему в бесконечный цикл и
> > не требовал перезагрузки по питанию? Потому, что кроме старого
> > 32-битного железа с 3 GB RAM, есть ещё большое количества старого
> > 64-битного железа с 2 GB RAM, которое физически отомрёт в тех же
> > школах наверняка позже 32-битного.  
> 
> В первую очередь следует включить zswap, лучше всего с методом
> z3fold. Это где-то в 1.5 раза эффективный объём памяти увеличит, но
> сделает хвост более медленным, но всё равно много лучше свопа.

  Но это всё-равно вероятностное решение будет: лопнет — не лопнет. Тут
ведь вся интрига в том, что когда ты кликаешь на ссылку, то точно не
знаешь, на какой сайт попадёшь — на лёгкий или на тяжёлый. И если память
лопнет, то наверняка придётся перезагружать всю систему, а не вкладку и
даже не браузер.

  Идеального поведения в отношении браузера я добивался отключением
overcommit_memory. В случае исчерпания памяти очередная вкладка
показывала сообщение "Извините, вкладка упала", а всё остальное
продолжало работать. Я так понял, что новый Firefox умеет не падать
целиком.
  Это действительно было идеально, но на машинке, у которой было
больше 2 ГБ, возможно даже 4 ГБ. Если памяти меньше, то с отключённым
overcommit даже простой графический сеанс уже не запустить. А там, где
сеанс и браузер запустить удаётся, часто нет возможности даже открыть
новый эмулятор терминала. По-видимому, переоцениваются потребности
очередного fork() или что-то в этом роде.
  Поэтому отключение overcommit это тоже не выход. К сожалению.


Подробная информация о списке рассылки Devel