Как контролировать использование RAM / swap

18

Есть ли способ (приложение) для контроля ОЗУ / политики использования подкачки на уровне приложения.

У меня есть некоторые приложения, которые я использую все время, и я хочу, чтобы они постоянно оставались в оперативной памяти, а также есть приложения, которые я использую довольно редко, и они могут быть выброшены для замены по требованию. Я знаю, что настроенные по умолчанию окна должны дать мне лучшую производительность, но я хочу проверить, могу ли я получить больше :).

Я использую Windows 7.

Darqer
источник
2
+1. Я заинтересован в методе, который работает для XP.
Xavierjazz

Ответы:

9

Да, есть: заставить программу вызывать функцию VirtualLock :

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

Я считаю, что функция SetProcessWorkingSetSize также может быть полезна.


Для тех, кто думает, что я еретик, даже предположил, что это может быть полезно:

Обратите внимание, что могут быть веские причины для блокировки страниц в памяти. Действительная причина может заключаться в том, что пользователь запускает устройство записи компакт-дисков, а устройство записи компакт-дисков постоянно выгружает страницы и, следовательно, вызывает переполнение буфера, создавая подставку. В этой ситуации было бы допустимо блокировать буферы памяти, чтобы они не выгружались, даже если это означает, что остальная часть компьютера замедляется для сканирования, потому что это все же лучше, чем предоставить пользователю средство для подкачки. Могут быть и другие веские причины - моя точка зрения такова: хотя обычно не рекомендуется блокировать страницы в памяти, допустимые ситуации все еще существуют, и я не думаю, что уничтожение этой идеи поможет ОП здесь.


Обновление: Посмотрите на Process Hacker «s Reduce Working Setопции меню.

Mehrdad
источник
Возможно, цитирование этого бита из статьи поставило бы его в контекст: «Блокировка страниц в памяти может ухудшить производительность системы, уменьшив доступную оперативную память и вынудив систему выгрузить другие критические страницы в файл подкачки. Каждая версия Windows имеет ограничение на максимальное количество страниц, которое может заблокировать процесс. Это преднамеренно мало, чтобы избежать серьезного снижения производительности ». (Мой акцент)
1
@Randolph: я никогда не рекомендовал это, я только упомянул, что, в отличие от того, что большинство других людей думают, это возможно . Лично я просто ненавижу говорить ОП «Давайте убьем вашу идею» - я думаю, что ОП понял, что тот факт, что он не должен этого делать, но если он все еще хочет, я думаю, он имеет право знать, как это сделать. (Есть причина, по которой они создали эти функции, и я не тот человек, чтобы судить о том, должен ли их использовать ОП или нет.)
Mehrdad
В Windows много кода, оставленного для обратной совместимости. Если есть причина для этого, это было бы это. Можно сравнить его с функцией сжатия в SQL Server, которая не должна использоваться ни при каких обстоятельствах, но была оставлена ​​в целях совместимости. Windows 7 - современная ОС с надлежащим управлением памятью, и файл подкачки не должен быть удален, и программы не должны пытаться оставаться в памяти вне «правил». Это очень плохая практика и может привести к нестабильной и / или непригодной системе.
1
@Randolph: (я вижу, что вы отказались от аналогии.:]) Создайте крошечную программу (не более 10 строк), чтобы открыть другой процесс и вызвать его SetProcessWorkingSetSize. Это один из способов. Если, конечно, если вы не знаете, что это значит, потому что вы не разработчик, то, очевидно, вы мало что можете сделать. Но это все еще возможно, и говорить, что это невозможно, все равно неправильно, просто требуется больше знаний, чем могло бы иметь ОП.
Мердад
1
@Randolph, вы можете загружать различные бесплатные приложения, которые заставляют все запущенные приложения переходить в файл подкачки (вызывая SetProcessWorkingSetSize в каждом процессе).
Chris O
5

Единственный способ, который я нашел, - отключить файл подкачки. Однако это не идеальное решение: вы будете получать сообщения об ошибках, если ваш предел ОЗУ приближается к пределу или превышает его, и он не сможет правильно сохранять аварийные дампы, поэтому включите его снова, если вам нужно устранить неполадки. Кроме того, я использую Win7 без файла подкачки в течение нескольких месяцев без помех.

Мой опыт: у меня была эта проблема с программным обеспечением пианино (использование 1 ГБ ОЗУ), которое было бы выброшено в swap после того, как какое-то время не использовалось. Воспроизведение клавиши пианино через несколько часов может привести к сбоям в работе, поскольку своп не будет перезагружен достаточно быстро для воспроизведения звука. (Я бы тогда положил всю свою руку на каждый ключ, чтобы вызвать перезагрузку!)

Если оперативная память является проблемой, я предлагаю вам купить больше (например, от 8 до 12 ГБ с Windows 7 x64). Для сознательного ОЗУ наличие большого количества ОЗУ - это находка.

Но прежде вы должны подумать о том, чтобы приобрести SSD-накопитель и установить на него своп. Это значительно ускорит восстановление подкачки, а также предоставит множество других системных преимуществ. Оперативная память не дает преимуществ, когда она не используется.

MTONE
источник
3
Делать. Не. Удалять. . Page. Файл. Когда-либо.
7
У меня есть. Been. С помощью. Win7. С. Нет. Pagefile. За. Месяцы. Без. А. Хитч
Mtone
1
Я также все время использую Win7 без файла подкачки, однако мне кажется, что этого может быть недостаточно для моей текущей работы :(
Darqer
3
@Randolph: MS знает, о чем они говорят, потому что они знают, что их клиенты не всегда компьютерные профессионалы. Но для тех людей, которые на самом деле точно знают, что файл подкачки делает и чего не делает, нет никаких причин заставлять их практиковать то, что им не нужно.
Мердад
2
@Randolph: Если вы едете за пределы скорости без ремня безопасности, вы можете умереть, а также убить других людей, не говоря уже об увеличении расходов на страхование для других. Худшее, что может случиться, если ваш компьютер распечатывает память, это то, что вы просто потеряете немного времени, в зависимости от ситуации. Разве вы не видите что-то немного (читай: много) не так с аналогией здесь? Кроме того, вы использовали Linux / Unix? Вы когда-нибудь замечали, как они дают вам более чем достаточно веревки, чтобы повеситься, в отличие от Windows? Люди все еще используют их - это как вождение под влиянием или что-то в этом роде?
Мердад
2

Использование файла подкачки зависит от множества факторов. Если вы используете много программ и не имеете достаточно ОЗУ для всех одновременно, то некоторые из них (или все) могут быть выгружены в файл подкачки.

Если у вас 4 ГБ ОЗУ и, скажем, около 3 ГБ доступно из-за того, что видеокарты и другие пользователи ресурсов блокируют части 4 ГБ, и вы используете только несколько программ, которые не занимают много памяти, теоретически вы никогда не нужен файл подкачки. Однако Windows Vista и 7 общеизвестно агрессивны в обмене программами на диск.

Раньше у меня был параметр, который уменьшал перестановку в Windows 7 (перестановка - это термин для Linux, но он также применим и к Windows, и, поскольку есть параметр реестра для укрощения агрессивности Windows, кажется, что Microsoft неохотно соглашается, хотя и хорошо скрытно), но я не могу найти это больше. В поисках так я оказался здесь. Лучшая альтернатива этой настройке, которую я нашел, - это убедиться, что вы используете файл подкачки фиксированного размера (я использую 4096-4096 для 32-разрядных ОС и 12 ГБ для 64-разрядных, так как у меня 6 ГБ системной памяти) на выделенном разделе. Имея запасной диск емкостью 7200 об / мин 200 ГБ, я размещаю все свои разделы подкачки (Windows XP, 7, 7 64-битные и различные Linux) на этом диске. Кажется, работает для меня, но YMMV.

Павел
источник
1

Стоит упомянуть: когда Windows обнаруживает, что вы часто используете определенные приложения, суперфакция помещает эти приложения в память, чтобы они загружались быстрее. Я думаю, что доверять Windows, чтобы сделать свое дело здесь.

CreeDorofl
источник