У меня на ноуте аж целых 12 ГБ ОЗУ, винда 8.1. Я решил, что этого выше крыши и хватит мне с огромным запасом и отключил файл подкачки (точнее уменьшил до 1 ГБ). На предыдущем ноуте с семёркой у меня было 8 ГБ и больше 5 ГБ никогда занято не было. Обычно меньше.
С тех пор конечно требования к памяти подросли. Я стал открывать больше вкладок в Хроме (в среднем 10-20), у меня всегда запущена почта, студия 2015, штук пять папок в проводнике и 3 фотки. А ещё пара облачных клиентов с синхронизацией и какая-то предустановленная системная мелочёвка в трее - Intel Rapid, NVIDIA GeForce Experience, Synaptics Pointing Device. Я это боюсь убирать из автозагрузки, вдруг что поломается, но просто выключать пробовал, памяти очень мало освобождается. Компьютер работает без перезагрузки 10 суток, если не считать времени, когда он был в гибернации. Итак, со всем этим у меня диспетчер задач показывает вот что:
Винда уже ругается на нехватку памяти и хром начинает падать при открытии новых вкладок, хотя как бы ещё целый гигабайт доступен. И ещё чего-то там кэшировано 4,1 ГБ, наверняка это можно было бы выгрузить.
Судя по списку процессов, которые показывает диспетчер задач, всё перечисленное должно занимать не больше 2-3 ГБ и ещё около гигабайта на системные процессы. Примерно так и получается, если всё закрыть - всё равно остаётся занято около 5-7 ГБ.
Куда девается оперативка? Это утечка памяти в самой системе? Ведь при закрытии приложений память процесса должна освобождаться, даже если там есть утечки.
Монитор ресурсов> Память
V
> Монитор ресурсов> Память
Там где список процессов показан, в сумме наберётся всего 5 ГБ. Физическая память: используется 7167 МБ, Доступно 1429, Изменено 3622. Что значит последнее?
ТрастИнсталлер пожрал небось
antonn
> ТрастИнсталлер пожрал небось
Тогда бы он отображался бы в диспетчере задач и я бы обратил на него внимание. Да и вообще я обновления последнее время вроде не устанавливал.
gammaker
> используется 7167 МБ, Доступно 1429, Изменено 3622. Что значит последнее?
Перевод такой дебильный. Это «modified»-память, модифицированная, изменённая. Виды памяти:
1. «Используемая» память. По идее, это сумма рабочих наборов процессов. Может быть, плюс ещё что-то специфическое. Правда у рабочих наборов есть частная часть, а есть ещё общая, так что вручную рабочие наборы хрен правильно просуммируешь, чтоб всё сошлось.
2. «Модифицированная» память (modified). Память, исключённая из рабочего набора процессов, но не имеющая копии на диске. Т.е. она содержит какие-то уникальные данные, которые создавшему их процессу в данный момент не нужны, но потерять их нельзя, потому что будет неоткуда потом восстановить. Если процесс обратится в своей «модифицированной» памяти, она мгновенно вернётся в его рабочий набор. Иначе, если имеется дефицит «доступной» памяти и дисковая подсистема ничем особо не занята, Windows будет потихоньку записывать содержимое «модифицированной» памяти в файл подкачки. После записи на диск, память из разряда «модифицированной» перейдёт в разряд «кэша».
3. «Кэш» (standby). Память, хранящая какие-то потенциально полезные данные, копия которых гарантированно имеется на диске. Копия на диске может быть по двум причинам: либо эти данные были сохранены в файле подкачки, либо они изначально были прочитаны из файла, не были изменены, а файл не был удалён. Если процесс обратится к странице памяти из кэша, она мгновенно вернётся в его рабочий набор. А если какому-то процессу потребуется дополнительная память, а «свободной» не окажется, то «свободная» память будет пополнена за счёт «кэша».
4. «Свободная» память (free). Либо она есть изначально, либо по необходимости получилась из «кэша», либо ты закрыл программу и содержимое её стека и кучи резко стало никому не нужно и превратилось в «свободную» память. На самом деле, свободная память ещё разделяется на просто свободную (free) и обнулённую (zeroed). Если страница памяти попала в список свободных, она забивается нулями и только после этого может быть выдана какому-нибудь процессу.
Это я так примерно обрисовал. На самом деле, там до хрена ещё тонкостей. А после отметки, на которой мои знания заканчиваются, наверняка всё ещё веселее. Вот хорошая статья: http://blogs.msdn.com/b/ntdebugging/archive/2007/10/10/the-memory… ell-game.aspx
Диспетчер задач Windows 7 под «доступной» (available) памятью понимает «кэш» + «свободная» память. А под «используемой», кажется, всё остальное.
Что имеет в виду диспетчер задач Windows 8.1, когда говорит, что кэша 4.1Гб, а доступной памяти 1.3Гб, мне непонятно от слова «вообще».
gammaker
> Изменено 3622
Скачай RAMMap, посмотри, чьи эти 3,6Гб. Это необычно много. Обычно там мало, несколько десятков, ну сотен мегабайт.

PS
> И ещё чего-то там кэшировано 4,1 ГБ, наверняка это можно было бы выгрузить.
Не надо. Перекинуть память из кэша в свободную, обнулить и заново кому-то отдать ничего не стоит. Это происходит мгновенно. Поэтому Windows включает кэш в понятие «доступной» памяти наравне со свободной, по крайней мере по всех версиях по Windows 7 включительно.
gammaker
> Это утечка памяти в самой системе? Ведь при закрытии приложений память процесса
> должна освобождаться, даже если там есть утечки.
Вряд ли ты поубивал все-все-все процессы, за исключением процессов Windows. Даже если вдруг течёт какой-нибудь системный svchost.exe (хост-процесс, внутри которого работают службы), это будет значить, только что течёт какая-то служба, и наверняка сторонняя. Вообще, реальная утечка памяти в условиях отключенного или сильно ограниченного файла подкачки так и должна выглядеть:
1. Процесс течёт, к утёкшей памяти не обращается, она потихоньку исключается из его рабочего набора и переходит в разряд модифицированной памяти.
2. Т.к. в файле подкачки места нет, модифицированной памяти становится всё больше и больше, а свободной и кэша всё меньше и меньше.
3. Когда кэша не остаётся совсем, свободную память брать больше не от куда, разные процессы при попытке запросить у Windows дополнительную память начинают в случайном порядке падать, т.к. Windows им ничего выделить больше не может.
---
Ещё можно в диспетчере задач на закладке Процессы добавить колонку под названием что-то типа «виртуальная память процесса» или «выделенная процессу память» ― не помню как по-русски. Выделенная процессу виртуальная память тоже должна зашкаливать, если он серьёзно течёт.
gammaker
> И ещё чего-то там кэшировано 4,1 ГБ, наверняка это можно было бы выгрузить.
В реестре параметр подправь минимальный и максимальный размер кеша
alexzzzz
> Не надо. Перекинуть память из кэша в свободную, обнулить и заново кому-то
> отдать ничего не стоит. Это происходит мгновенно. Поэтому Windows включает кэш
> в понятие «доступной» памяти наравне со свободной, по крайней мере по всех
> версиях по Windows 7 включительно.
Ну вот на скрине: Доступно 1,3 ГБ, Кэшировано 4,1 ГБ. Получается, не включает? И уже ругается на нехватку памяти и процессы падают, хотя ещё целый гигабайт с лишним доступен.
alexzzzz
> Скачай RAMMap, посмотри, чьи эти 3,6Гб. Это необычно много. Обычно там мало,
> несколько десятков, ну сотен мегабайт.
Я уже перезагрузил комп. Сейчас показывает Изменено 84 МБ. Подожду, когда подрастёт и попробую RAMMap.
alexzzzz
> Вряд ли ты поубивал все-все-все процессы, за исключением процессов Windows.
В диспетчере задач во вкладке Пользователи до освобождения было занято 1850 МБ. Остальное либо за системой, либо не отображается? Значит ли это, что если бы я поубивал все процессы от пользователя, то освободил бы не больше 1850 МБ? Надо, кстати, попробовать будет в следующий раз, не перезагружаясь, перелогиниться.
gammaker
Самое интересное, что счетчик на графике показывает "10.6", а внизу в "выделено" - 12.8. Т.е. 2.2 гига куда-то замылились. Я давно эту хрень заметил, все эти показания какая-то муть. Ни с чем не сходится.
Судя по картинкам из этого поста, Windows 8 зачем-то обзывает modified-память как cached. Тогда понятно, почему этой самой cached памяти получается больше, чем available/доступной памяти. В общем, кто-то течёт. Надо найти, кто.
--
На графике 10,6 из 11,9 ― это означает, что из 11,9 Гб физической памяти использованными считаются 10,6 Гб, а остальные 1,3 Гб считаются доступными (standby + free).
Выделено 12,8 из 12,9 ― это означает, что из максимально доступных 12,9 Гб виртуальной памяти (12 Гб физической + 1 Гб файл подчачки) все приложения в сумме запросили уже 12,8 Гб. Если какой-то процесс сейчас запросит у Windows больше 100Мб, он жестоко обломается.
Виртуальная память и физическая память практически не связаны друг с другом. Как может быть, что количество запрошенной виртуальной памяти больше, чем используемой физической? Как минимум две причины:
1. Память, которая standby, считается не используемой, а доступной. Несмотря на то, что она отображена в виртуальное адресное пространство какого-то процесса (процессов).
2. Какие-то данные, к которым давно не было обращений, могут быть стёрты из физической памяти и находиться только в файле подкачки. Т.е. виртуальной памяти они есть, а в физической их уже нет.
3. Когда процесс запрашивает себе дополнительной памяти, Windows просто у себя отмечает, что суммарно было запрошено столько-то, но реально выделяет физическую память только по мере её использования. Т.е. если процесс запросил у Windows 1Гб памяти, но ни разу к ним не притронулся, его рабочий набор не должен вырасти.
gammaker
> винда 8.1
Ясно. Где-то валялся диск с последней Xp. Скоро психану и поставлю себе.
captain NOVA
> Ясно. Где-то валялся диск с последней Xp. Скоро психану и поставлю себе.
Были мысли взять x86 планшет и поставить туда XP. А то 2 ГБ оперативки для восьмёрки будет очень мало, если даже 12 ГБ не хватает. А для XP выше крыши. Только там наверное плохой спящий режим, а ещё будут проблемы с драйверами и энергосбережением.
gammaker
Не. Взять свою мощную компу и поставить туда xp. Вот это производительность. Я гарантирую.
captain NOVA
> Взять свою мощную компу и поставить туда xp. Вот это производительность. Я
> гарантирую.
и всем прогам юзать только 4 общих регистра вместо 16?
выкинуть современные расширения у процессоров?
Тема в архиве.