Войти
ФлеймФорумПрограммирование

Диспетчер задач win8 походу врёт насчёт занимаемой процессами памяти. [Где косяк и как исправить?] (2 стр)

Страницы: 1 2 3 Следующая »
#15
19:39, 18 июня 2018

Psilen
>api из user32.dll
Это строка Image из vmmap, исполняемые файлы.

Есть еще Mapped Files, это когда программа через CreateFileMapping+MapViewOfFile сообщает винде - отобрази вон тот терабайтный файл мне в память. Очевидно больше одного процесса может один и тот же файл отобразить себе в память.

Ну и Shareable, это когда CreateFileMapping+MapViewOfFile используется без файла для создания именованной области разделяемой памяти. Это имя (или хендл через DuplicateHandle) можно передать в другой процесс и работать с одной областью памяти из разных процессов.

>раза в полтора меньше значения "выделенная память"
Скорее всего в основном из-за .exe и .dll файлов, проверять лень.


#16
19:51, 18 июня 2018

CD
> Скорее всего в основном из-за .exe и .dll файлов, проверять лень.
А возможно стоит...
Расскажу, с чего это я вообще заинтересовался данной темой. Пользуюсь браузером Vivaldi (сильно модифицированный хромиум, идеологический наследник Оперы), и он регулярно жрал по 8+ гигов виртуальной памяти. Написал об проблеме в русскоязычное сообщевство, поломали голову, но так ничего путного придумать и не смогли. Самое интересное, что по всем показателям, все его процессы потребляют от силы гига 4 памяти, а если закрыть браузер, то сразу -8 гигов. Загадка.
(Ну, на самом деле, в итоге один умник раскопал ключ чтобы не по процессу на вкладку, а по процессу на все вкладки для одного домена — это вроде снижает потребление памяти. Попробовал вроде помогает, но нужно больше времени  на статистику, чтоб можно было сказать точно.)
Так что, если у тебя есть Хром-образный браузер, то он тоже может начать выжирать тучу памяти и ты будешь без понятия от чего, и даже хотя бы сколько именно он этой памяти жрёт...

#17
20:18, 18 июня 2018

Psilen
> А возможно стоит...
Ну так проверь vmmap-ом, варианта всего три. Зачем вообще explorer.exe смотрел если тебя конкретная программа интересует?

#18
20:22, 18 июня 2018

CD
> Зачем вообще explorer.exe смотрел если тебя конкретная программа интересует?
Как я тебе проверю браузер, если он -- 13 процессов + бог знает чт о ещё?

#19
20:32, 18 июня 2018

CD
Ладно, попробуем на примерах. Вот я взял самый "большой" процесс браузера с pid 9160, открыл VMMap. Куда мне смотреть, на какие значения? Диспетчер задач пишет, что всего на процесс выделено 300 мегабайт, но наверняка больше.

+ Показать
#20
22:42, 18 июня 2018

Psilen
> Собственно вопрос: диспетчер задач действительно нагло врёт или это я не так
> что-то посмотрел?

Диспетчер задач не врёт, просто всю правду не сообщает, потому что нормальному человеку проще стать проституткой, чем разобраться в деталях работы менеджера памяти.

> Смотрю в диспетчер задач и вижу, что забито 3,2 гига виртуальной памяти.

Не «забито», а «выделено». Это не значит, что «выделенное» реально где-то расположено, в оперативной памяти или на дисках. Это значит, что разные процессы запросили, а ОС им гарантировала, что сможет предоставить 3,2 гигабайта. А начали процессы уже использовать всю запрошенную память или ещё нет и начнут ли вообще, неизвестно.

> Из них 2 гига в оперативе...

На самом деле, полезных данных в оперативной памяти намного больше, но не все они учитываются в этих 2 Гб. Если запустить утилиту RAMMap и нажать там Empty Working Sets, показатель «используестся» заметно уменьшится, но это не означает, что часть памяти перестала «использоваться» ― она просто перешла из одной категории в другую, а принципиально ничего не изменилось.

> Ну т.е. если сложить потребление памяти каждого процесса, то будет меньше чем суммарное потребление памяти по мнению диспетчера задач.

Бесполезно. Никогда не сойдётся. Сколько памяти потребляет процесс ― вопрос очень сильно размытый и одним числом не выражается. Возможно, и пяти чисел не хватит.

--
Забей, на картинках нет ничего подозрительного.

#21
23:45, 18 июня 2018

Psilen
Ничего интересного на скриншоте.

Расшифровываю:
250МБ оперативной памяти лично для этого процесса (Private WS),
64МБ оперативной памяти потенциально общие с другими процессами (Shareable WS)

290МБ виртуальной памяти лично для этого процесса (Private)

193МБ виртуальной памяти потенциально общие с другими процессами (Commited - Private)
из них
120МБ - .exe и .dll, в оперативной памяти присутствуют 36МБ, остальное не загружено
35МБ - файлы отображенные в память, в оперативке присутствуют 4МБ, остальное не загружено
38МБ - разделяемая память для общения с другими процессами, в оперативке присутствуют 24МБ, остальное скорее всего нули (для которых не выделяется оперативка пока туда что-нить не запишут)

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

#22
18:04, 9 июля 2018

alexzzzz
> нормальному человеку проще стать проституткой, чем разобраться в деталях работы
> менеджера памяти.
alexzzzz
> Бесполезно. Никогда не сойдётся. Сколько памяти потребляет процесс ― вопрос очень сильно размытый и одним числом не выражается. Возможно, и пяти чисел не хватит.
Жесть какая-то, неужели так мутить было и правда необходимо?! Что ещё раз доказывает, какие Майкрософт мутные мудаки...

alexzzzz
> Это не значит, что «выделенное» реально где-то расположено, в оперативной
> памяти или на дисках. Это значит, что разные процессы запросили, а ОС им
> гарантировала, что сможет предоставить 3,2 гигабайта. А начали процессы уже
> использовать всю запрошенную память или ещё нет и начнут ли вообще, неизвестно.
Моё имхо всё-таки считает, что раз прога (ну т.е. процесс) память запросила, значит для ОС, однозначно, эта память уже используется. Т.е. (для ОС) запрошено == используется.

CD
> Оперативная память - реально потреблямый ресурс,
> Виртуальная память - сколько могло бы быть потреблено оперативной памяти, почти
> ничего не стоит.
Спасибо за разъяснения.
Лучше не стало, но стало хотя бы понятнее.

alexzzzz
Тоже спасибо.

CD
> Оперативная память - реально потреблямый ресурс,
> Виртуальная память - сколько могло бы быть потреблено оперативной памяти, почти
> ничего не стоит.
Заодно не прояснишь такой вопрос: как лучше оценивать "степень загруженности" памяти?
Вот например сейчас (точнее сегодня) диспетчер задач пишет, что используется 3,5 ГБ/5,9 ГБ оперативы, а выделено 4,6 ГБ. При этом иногда испытываю непонятные подтормаживания системы. В частности при вызове диспетчера задач пару раз прям видно было как по частям отрисовывается окно в течение где-то 3 секунд, ещё браузер при разворачивании и создании новой вкладки иногда сильно лагает. Не всегда, но несколько раз за сегодня было. При этом смотрю в диспетчер задач (он у меня всегда запущен в виде иконки в трее), а там ничего: ни резких изменений памяти, ни нагрузки на винт, ни на проц. Всё-таки грешу на замуты с памятью. (Вирусов 100 лет не видел, проблем с железом тоже, ОС тоже в целом работает стабильно без тормозов.)

#23
19:34, 9 июля 2018

Psilen
> что используется 3,5 ГБ/5,9 ГБ оперативы
это то сколько сейчас памяти занято приложениями и доп. инфой (не успевших записаться файлов на диск к примеру).
Psilen
> а выделено 4,6 ГБ
это то сколько у тебя сейчас сохранено в файл подкачки
кешировано ХХХ - это то сколько доп. данных загружено в память, используется для быстрого запуска приложений (когда ты часто запускаешь/выключаешь приложухи, они могут не выгружаться из оперативы)

в информации о процессах в диспетчере задач в "частный набор" не входит маппинг файлов, т.е. если я открою файл через маппинг на 2ГБ, если я буду туда писать и винда не будет успевать это записывать на диск, либо всё это читать, то в использовании оперативы увеличится на кол-во записанных данных, но в "частном наборе" эти изменения не будут отображены.

Все подтормаживания случаются как раз когда происходит запись/чтение диска, т.е. либо когда кто-то пишет/читает напрямую в файл или через маппинг, либо когда система записывает в файл подкачки или считывает из него для того что бы вернуть твою программу в рабочее состояние.

#24
21:41, 9 июля 2018

ASP
> Psilen
> > что используется 3,5 ГБ/5,9 ГБ оперативы
> это то сколько сейчас памяти занято приложениями и доп. инфой (не успевших
> записаться файлов на диск к примеру).
Я в курсе.

ASP
> Psilen
> > а выделено 4,6 ГБ
> это то сколько у тебя сейчас сохранено в файл подкачки
> кешировано ХХХ - это то сколько доп. данных загружено в память, используется
> для быстрого запуска приложений (когда ты часто запускаешь/выключаешь
> приложухи, они могут не выгружаться из оперативы)
Скьорее уж "сколько у тебя сейчас сохранено в файл подкачки" это разница между "выделено" и "используется" = 4,6 - 3,5 = 1,1 Гб.
Кешировано пишет... там данные постоянно меняются в районе 400 мегабайт. (Но я недавно выключал ноут в спящий режим, это могло изменить показания с момента написания предыдущего моего сообщения.)

ASP
> Все подтормаживания случаются как раз когда происходит запись/чтение диска,
> т.е. либо когда кто-то пишет/читает напрямую в файл или через маппинг, либо
> когда система записывает в файл подкачки или считывает из него для того что бы
> вернуть твою программу в рабочее состояние.
Теоретически да, но я ж смотрел и никаких скачков нагрузки на диск не заметил.

#25
23:58, 9 июля 2018

ASP
> Все подтормаживания случаются как раз когда происходит запись/чтение диска,
> т.е. либо когда кто-то пишет/читает напрямую в файл или через маппинг, либо
> когда система записывает в файл подкачки или считывает из него для того что бы
> вернуть твою программу в рабочее состояние.
Монитор ресурсов для подобных случаев показывает специальный показатель - "ошибки отсутствия страницы в памяти" (должно быть, это так перевели "page faults").

Psilen
> Жесть какая-то, неужели так мутить было и правда необходимо?!
Конечно. Зачем, при загрузке данных с диска, ждать до самого последнего момента и грузить всё по-новой каждый первый раз, когда можно загрузить заранее и держать наготове?

#26
1:20, 10 июля 2018

Psilen
> > Бесполезно. Никогда не сойдётся. Сколько памяти потребляет процесс ― вопрос
> > очень сильно размытый и одним числом не выражается. Возможно, и пяти чисел не
> > хватит.
> Жесть какая-то, неужели так мутить было и правда необходимо?! Что ещё раз
> доказывает, какие Майкрософт мутные мудаки...

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

Psilen
> Моё имхо всё-таки считает, что раз прога (ну т.е. процесс) память запросила,
> значит для ОС, однозначно, эта память уже используется. Т.е. (для ОС) запрошено
> == используется.

Программы обычно не запрашивают памяти по чуть-чуть на каждый чих, а берут оптом, с запасом. Используется ― это когда туда что-то хоть раз было записано, и теперь это что-то ОС должна где-то хранить: в оперативной памяти или на диске. А если, скажем, браузер попросил 200 виртуальных мегабайт (увеличил свой Commit Size на 200Мб), а к половине из них ещё даже не притронулся, то в Commit Size они учтены, а по факту не используются, полезных данных ещё нет и хранить в ОЗУ или на диске нечего. Не, можно хранить в ОЗУ 100Мб каких-нибудь нулей, но зачем? ОЗУ ― ценный ресурс, эти 100Мб пока эффективнее использовать на что-то более полезное, например файловый кэш. А файловый кэш в категорию «Использовано» не входит.

Типичная ситуация, когда человек с 8 Гб ОЗУ (например), отключает файл подкачки, назапускает чего-нибудь прожорливого и получает проблемы с невозможностью выделить память, хотя «используется» ещё не 8 Гб, а всего 7. А потому что, хоть в данный момент и используется семь, но запрошено у ОС было восемь. Всё что было можно, всё уже роздано, а то что оно на 100% не используется, на это ОС не может повлиять. Поэтому не надо отключать файл подкачки, он полезен одним своим существованием.

Где-то видел хорошую аналогию:

Ты управляешь хорошей гостиницей. Звонит клиент, бронирует три номера на себя и друзей, а приезжает один ― друзья задерживаются, то ли приедут, то ли нет. Звонит ещё клиент, просит ещё номер, а у тебя больше нет свободных номеров (Total Commit Size уже равен Max Commit Size, в данном случае объёму ОЗУ ― количеству номеров в гостинице). Вроде два номера стоят пустые, но они обещаны первому клиенту. Что делать?

Если неподалёку есть совершенно пустое общежитие (файл подкачки), ты можешь выделять номера не только из своего фонда (ОЗУ), но и договориться с общежитием. Тогда Max Commit Size суммируется из объёма ОЗУ (номера в гостинице) и объёма файла подкачки (номеров в общежитии). Новому клиенту можно отдать один из забронированных хороших номеров с условием, что если номер всё-таки понадобится и других номеров к этому времени не освободится, то клиента могут попросить временно переселиться в общежитие. В результате всем клиентам хорошо ― им гарантированы номера (причём в количестве большем, чем есть у твоей гостиницы), тебе тоже хорошо ― клиентов много и все платят, а переселять кого-нибудь в общежитие может даже и не потребуется.

Delfigamer
> Монитор ресурсов для подобных случаев показывает специальный показатель -
> "ошибки отсутствия страницы в памяти" (должно быть, это так перевели "page
> faults").

Hard [page] faults. В общем-то правильно перевели, по смыслу.

#27
4:58, 10 июля 2018

Psilen
> как лучше оценивать "степень загруженности" памяти?

Для неочевидных случаев - RamMap

https://docs.microsoft.com/en-us/sysinternals/downloads/rammap

Вкладка Use Counts, отсортировать по убыванию Total

На моей машине выглядит так

+ Показать

Самые большие строчки означают следующее:
Unused - свободная память. Если есть значимое количество - проблем с нехваткой скорее всего нет.
Mapped File - файловый кеш (разбивка по файлам на вкладке File Summary)
Process Private+Shareable - процессы (разбивка для Private по процессам на вкладке Processes)
Metafile - кеш метаданных файловой системы (без разбивки)
Остальное относится к драйверам и ядру ОС и от процессов зависит косвенно.

Active означает что для того чтобы использовать оперативную память для других целей, придется сохранить содержимое на диск
Standby означает что содержимое уже есть на диске и для других целей оперативку можно использовать немедленно

>по частям отрисовывается окно в течение где-то 3 секунд

хз, я не сталкиваюсь с ноутами
могу предположить:
1) кто-то читал файлы с диска больше обычного (например антивирус или торрент клиент) и винда выкинула из памяти данные процесса ради увеличения дискового кеша
2) перегрев и пониженная частота процессора/видеокарты
3) глюки кривого драйвера

Прошло более 1 года
#28
(Правка: 3 июля 2020, 15:08) 20:46, 2 июля 2020

Сорян за некропост (2 года спустя...), но у меня опять эта проблема: ноут и винда те же, но, на сей раз, диспетчер задач "врёт" насчёт памяти занимаемой виртуальной машиной. Короче, запускаю прогу, диспетчер задач пишет, что (после запуска) выделено +800метров виртуальной памяти, а во кладке "Подробности" для искомого процесса (виртуальной машины) лишь 140 метров виртуальной памяти. Где искать остальные 700?

+ Скрин VMMap
+ Скрины RAMMap до и после запуска

#29
21:47, 3 июля 2020

Silen#ID
> А тут, больше всего изменения в строке "Driver Locked". Заблокировано
> драйвером? И что это значит?

Это оно и есть. Дашь виртуальной машине 4 Гб ОЗУ, будет там 4 Гб. Драйвер «заблокировал» для работы виртуалки сколько-то физической памяти, так что менеджер памяти Windows управлять ей больше не может: не может выгрузить в  файл подкачки, не может никому отдать в пользование.

> Аналогично, такая память не доступна для учёта дисп.задач?

Эта память учитывается, но не для какого-то конкретного процесса, а в общем ― на закладке Performance в разделе Memory в пунктах In Use и Commited при запуске виртуальной машины прибавляется, при остановке убавляется.

Страницы: 1 2 3 Следующая »
ФлеймФорумПрограммирование