Перейти к содержанию
    

Ограничить память в Windows

Имеется феномен — если отключить файл подкачки, то после исчерпания ОЗУ, работающие программы закрываются, а иначе, т.е. при 100% заполнении файла подкачки,— продолжают работать.

 

Следовательно, это искусственное ограничение и его как-то можно отключить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сколько я понимаю, это не искусственное ограничение, а естественное. У ядра просто нет выбора. Как только у ядра ОС заканчивается адресное пространство, доступное для отображения при запуске и работе процессов, то кому-то приходится пострадать. Именно поэтому рекомендуется делать своп-файл приличного  размера, хотя для работы он вроде бы не нужен.

По работе этого механизма в windows я документации не встречал, но в линуксе это хорошо описано. Полагаю, что windows действует аналогично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Plain said:

Имеется феномен — если отключить файл подкачки, то после исчерпания ОЗУ, работающие программы закрываются, а иначе, т.е. при 100% заполнении файла подкачки,— продолжают работать.

Это не феномен, а ошибка эксперимента.  И при включенной подкачке  программы успешно крашатся при исчерпании памяти.   

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При включённой и на 100% заполненной страничной памяти у меня всё работает, и ещё десяток новых программ можно запустить без проблем, кроме жуткого тормоза. Моя версия — поскольку сами программы занимают лишь половину ОЗУ, то всё забито файловым кэшем, т.е. внутренними данными ОС, и поэтому ей каждый раз легко подвинуться. При выключенной подкачке эксперимент тот же, но ОС действует по-другому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Plain said:

При включённой и на 100% заполненной страничной памяти

Это может лишь означать что видимое вами 100% заполненной страничной памяти по факту не является 100%-ным,  и при этом swap-файл все еще работает (как раз из за этого и тормоза). 

  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что тогда означают эти постоянные 99%? При этом можно ещё много программ запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Plain said:

При включённой и на 100% заполненной страничной памяти у меня всё работает, и ещё десяток новых программ можно запустить без проблем, кроме жуткого тормоза. Моя версия — поскольку сами программы занимают лишь половину ОЗУ, то всё забито файловым кэшем, т.е. внутренними данными ОС, и поэтому ей каждый раз легко подвинуться.

Логично: когда swap исчерпан, начинает сокращаться дисковый кэш (как раз на десяток программ с сопутствующими тормозами). Без swap этот момент наступает несколько раньше, только и всего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос темы в том, что ОС поджимает кэш только когда подкачка включена, т.е. у него в этом случае ниже приоритет, а когда выключена, то кэш забивает всё ОЗУ и начинает крошить другие программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Plain сказал:

кэш забивает всё ОЗУ

Кэш имеет более низкий приоритет, чем память для работы процессов, поэтому я очень сильно сомневаюсь, что причина в этом. Чтобы память не пропадала впустую ОС пытается её использовать для повышения эффективности работы, но холодные страницы (без модификации) ОС может освободить от использования кешом и отдать процессам в любой момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эксперимент выглядит так, что с выключенной подкачкой я запускаю всего пару программ, которые занимают 25% ОЗУ, и через несколько часов работы одной из них с файлами, ОС закрывает другую, которая ничего не делала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping

А вообще нужно смотреть карту памяти ваших процессов и не текут ли в них дескрипторы и память.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, работает с файлами, т.е. они все заняты, но при включённой подкачке ОС их скидывает на диск, а при выключенной — нет.

 

Вряд ли что-то течёт, с подкачкой эта машина работает месяцы без сбоев.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

29 минут назад, Plain сказал:

Вряд ли что-то течёт, с подкачкой эта машина работает месяцы без сбоев.

Я бы всё же это проверил, т.к. у меня было подобное пару раз у длительно работающих сервисов, причём течи были вызваны гонками между потоками и в результате частенько получалось, что при тормозящей со свопом системе оно как-то работало, а вот на системах с минимумом свопа или без него процессы валились OOM killer'ом ядра Linux.

Ещё можно поэкспериментировать с https://github.com/lowleveldesign/process-governor чтобы оценить на сколько реальное поведение процесса с точки зрения объема выделяемой памяти отличается от теоретических оценок требуемой для работы процесса памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется понял механизм кэша, о чём тут говорили,— ОС ограничивает его на уровне порядка –1% от имеющегося объёма ОЗУ, тогда при включённой подкачке она через этот 1% начинает её заполнять, а при выключенной всё крошится, потому что 1% практически для любой программы не хватит, если понадобится, т.е. вопрос темы таки сводится к тому, где подкрутить настройку кэша.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...