В сообщении от [Вт 2017-03-21 19:53 +0300] Max Dmitrichenko <dmitr...@gmail.com> пишет:
> Проблема тут не в неисправном железе, не в приоритетах, не в шедулере и не в > подобных "твиках" системы. Происходит тут следущее. Пока есть доступная память > и swap, то ОС активно использует и то, и другое. Но в силу каких-то > особенностей игры, со временем её потребление памяти разрастается, и она > съедает всю доступную память+swap, и запрашивает ещё чуть памяти. Если бы игра > попросила сразу много памяти, то ОС вызвала бы OOM-killer и убила бы игрушку. > Но игрушка просит совсем чуть-чуть. В этот момент Linux начинает очень > странную > борьбу за память. Поскольку выгрузить данные какой-нибудь софтины в swap более > нельзя, Linux начинает выгружать из памяти код запущенных процессов. Сделать > это он имеет право даже при отсутствие swap'а, т.к. копия этого кода есть на > жестком диске и он всегда сможет подгрузить этот код. Дальше начинается > чертовщина, потому что выгруженные процессы начинают просыпаться, и линукс > обратно начинает загружать их с ЖД в память, процесс приобретает > лавинообразный > характер, так как процессы пробуждаются быстрее, чем ОС успевает их > подгружать. > > Весь этот процесс напоминает сцену из фильма "Собачье сердце": когда профессор > передвигался на двух стульях по затопленной квартире - чтобы сделать очередной > шаг, надо освободить первый стул, и переставить его вперед. > > Цейтнот и комп "виснет", так как, чтобы залогиниться и зайти с другой консоли, > нужно выполнить как минимум несколько процессов - подгрузить getty, запустить > процесс login, а потом shell - а все они выгружены из памяти. > > Как бороться? > 1) Увеличить swap. 2 Гб явно маловато. Общие рекомендации для > пользовательского > компьютера состоят в том, что своп должен быть в два раза больше чем объем > RAM. > Если вас останавливает то, что нужно для это переразбивать разделы, то можете > сделать два свопа - один в существующем разделе на 2 Гб, второй просто файлом > на ЖД в любой существующей файловой системе. Однако, если в игрухе течет > память, то это лишь отсрочит сценарий, описанный выше. > > 2) Ограничь игруху (или пользователя брата) в использовании памяти. Как только > она превысит лимит, то будет убита. > > > 20 марта 2017 г., 20:47 пользователь Зиганшин Руслан > <ziganshinrus...@gmail.com > > написал: > > Компьютеру почти 11 лет, мат. плата (socket 775, поддержка только > одноядерных процессоров и до 2 гб ddr2 ram) и процессор (pentium 4), как > самые дорогие детали, до сих пор не заменены. Может так зависнуть при игре > младшего брата в garrys mod, что переключение по ctrl+alt+f1 занимает > несколько минут, а потом из-за таймаута не удаётся войти в свою учётку > чтобы если не завершить зависший процесс, то хотя бы выполнить sudo > reboot. > Под своп выделено 2 гб на hdd. На апгрейд пока нет средств. Не знал что линукс может выгружать код запущенных процессов без свопа, киньте ссылку почитать про это. Однако, если такое происходит, тогда остается единственный вариант — загружать всё в память и работать только в ней. То есть вам нужно сделать LiveCD и загрузить его в память. Возьмите готовый [1] на базе например Xfce, там всё как обычно, только рутовый раздел запакован и сжат в Squashfs. Распакуйте, сделайте chroot, удалите офис (и всё что считаете лишним, так как у вас всего 2 ГБ), добавьте вашу игрушку и снова запакуйте. Теперь загружайтесь с параметром toram (загрузить в память). Но прежде чем заморачиваться с LiveCD, попробуйте отключить своп совсем и посмотреть что будет. У меня был комп AMD A4 2 ядра и 2 Гб оперативки я решил провести эксперимент с cgroups [2]. Ограничил браузер Chrome одним ядром и одним гигабайтом оперативки, но разрешил своп и начал открывать вкладки новостных сайтов, дабы создать нагрузку. В какой-то момент, он начал свопить, когда своп достиг примерно 25% от оперативки, зависло всё, так же как и у вас, зайти в консоль и вырубить его занимало несколько минут. Так что увеличение свопа не вариант, можно порекомендовать zRam [3], но у вас мало оперативки, если игрушка активно свопит, то это всё равно не поможет. [1]: https://www.debian.org/CD/live/index.ru.html [2]: https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt [3]: https://ru.wikipedia.org/wiki/ZRam -- Коротаев Руслан https://blog.kr.pp.ru
smime.p7s
Description: S/MIME cryptographic signature