[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Как предотвратить жёсткие зависания компьютера в ресурсоёмких играх?



Сколько "интересных" советов от тех, кто не понимает сути проблемы.

Проблема тут не в неисправном железе, не в приоритетах, не в шедулере и не в подобных "твиках" системы. Происходит тут следущее. Пока есть доступная память и swap, то ОС активно использует и то, и другое. Но в силу каких-то особенностей игры, со временем её потребление памяти разрастается, и она съедает всю доступную память+swap, и запрашивает ещё чуть памяти. Если бы игра попросила сразу много памяти, то ОС вызвала бы OOM-killer и убила бы игрушку. Но игрушка просит совсем чуть-чуть. В этот момент Linux начинает очень странную борьбу за память. Поскольку выгрузить данные какой-нибудь софтины в swap более нельзя, Linux начинает выгружать из памяти код запущенных процессов. Сделать это он имеет право даже при отсутствие swap'а, т.к. копия этого кода есть на жестком диске и он всегда сможет подгрузить этот код. Дальше начинается чертовщина, потому что выгруженные процессы начинают просыпаться, и линукс обратно начинает загружать их с ЖД в память, процесс приобретает лавинообразный характер, так как процессы пробуждаются быстрее, чем ОС успевает их подгружать.

Весь этот процесс напоминает сцену из фильма "Собачье сердце": когда профессор передвигался на двух стульях по затопленной квартире - чтобы сделать очередной шаг, надо освободить первый стул, и переставить его вперед.

Цейтнот и комп "виснет", так как, чтобы залогиниться и зайти с другой консоли, нужно выполнить как минимум несколько процессов - подгрузить getty, запустить процесс login, а потом shell - а все они выгружены из памяти.

Как бороться? 
1) Увеличить swap. 2 Гб явно маловато. Общие рекомендации для пользовательского компьютера состоят в том, что своп должен быть в два раза больше чем объем RAM. Если вас останавливает то, что нужно для это переразбивать разделы, то можете сделать два свопа - один в существующем разделе на 2 Гб, второй просто файлом на ЖД в любой существующей файловой системе. Однако, если в игрухе течет память, то это лишь отсрочит сценарий, описанный выше.

2) Ограничь игруху (или пользователя брата) в использовании памяти. Как только она превысит лимит, то будет убита. 


20 марта 2017 г., 20:47 пользователь Зиганшин Руслан <ziganshinruslan@gmail.com> написал:
Компьютеру почти 11 лет, мат. плата (socket 775, поддержка только одноядерных процессоров и до 2 гб ddr2 ram) и процессор (pentium 4), как самые дорогие детали, до сих пор не заменены. Может так зависнуть при игре младшего брата в garrys mod, что переключение по ctrl+alt+f1 занимает несколько минут, а потом из-за таймаута не удаётся войти в свою учётку чтобы если не завершить зависший процесс, то хотя бы выполнить sudo reboot. Под своп выделено 2 гб на hdd. На апгрейд пока нет средств. 



--
With best regards
  Max Dmitrichenko

Reply to: