F
Fusa_Osint_ZOV
@fusa_zov_ru289 подп.
322просмотров
21 августа 2025 г.
Score: 354
📚 Эксперимент: как Windows «даёт» память — резерв vs подтверждение (commit) Продолжаем разговор про ОЗУ, но теперь — руками. Возьмём Sysinternals Testlimit и смоделируем нехватку памяти. Нам важно увидеть разницу между зарезервированным адресным пространством и подтверждённой (committed) памятью. Что делает Testlimit Это консольная утилита, которая умеет создавать нагрузку на память, дескрипторы, процессы и т.д. Мы используем её для двух кейсов: • -r — резервировать виртуальное адресное пространство (без реального выделения страниц); • -m — подтверждать (commit) страницы, то есть занимать память «по-настоящему» (RAM или pagefile). На 64-битной системе запускайте Testlimit64.exe. Права администратора не нужны. После теста просто закройте процесс — память вернётся системе. 1) Резервируем 800 МБ (адреса, не RAM) Открываем cmd и выполняем: Testlimit64.exe -r 1 -c 800 • -r 1 — размер 1 МБ на аллокацию, • -c 800 — 800 таких аллокаций ⇒ 800 МБ зарезервированного адресного пространства. Утилита выведет PID — пригодится, чтобы найти процесс в «Диспетчере задач» (вкладка «Сведения», добавьте столбец «Выделенная память (Commit size)»). Что увидите: «Commit size» у процесса почти не вырос — система заняла считанные мегабайты на служебные структуры, но RAM не ушла. Потому что резервирование ≠ использование: мы просто «отложили» адреса, не связывая их с физическими страницами. 2) Подтверждаем 800 МБ (занимаем реально) Теперь «по-взрослому»: Testlimit64.exe -m 1 -c 800 • -m делает commit тем же шагом: 800 × 1 МБ = ~800 МБ подтверждённой памяти. Что увидите: в Диспетчере задач «Выделенная память (Commit size)» у этого процесса ≈ 800 МБ. Это уже commit-charge — суммарный объём страниц, за который система отвечает RAM или pagefile’ом. Реально он разместится в RAM и/или в подкачке по усмотрению диспетчера памяти. Что из этого важно понять • Reserve — быстро, дёшево, без расхода RAM: просто блок адресов «застолбили». • Commit — «обещание» системе обеспечить эти страницы RAM’ом или pagefile’ом. Это увеличивает «Выделено (Committed)» и съедает commit-лимит. • Процесс может зарезервировать много, а подтвердить понемногу «по мере надобности» — так делают почти все нормальные приложения. Диспетчер задач: что смотреть на вкладке «Производительность» • Используется (сжата) — реально занятая физическая память (часть может быть сжата Memory Compression). • Доступно — то, что ОС может отдать без боли (сумма standby/modified/free). • Выделено (Committed) — два числа вида X / Y: • X — текущий commit-charge (вся подтверждённая память в системе, включая ваши процессы и ядро); • Y — commit-limit (примерно RAM + размер pagefile; зависит от настроек подкачки). Важно: это не «физически занято». Это «сколько пообещали обеспечить». • Кэшировано — файловый кэш (standby + modified). • Пул выгружаемый / невыгружаемый — память ядра и драйверов; первую можно выгружать в подкачку, вторую — нет. Если коротко: не смотрите только на «свободно». Смотрите Committed (X/Y) и нагрузку на диск из-за hard page faults — если их много, RAM реально не хватает. Мини-лайфхаки для эксперимента • Хотите ровно забить commit? Запускайте несколько экземпляров с -m. • Для диагностики структуры памяти процесса используйте VMMap, для системы — RAMMap: там лучше видно, где private/image/mapped, standby/modified и т.д. (покажу в следующем посте). • Никогда не отключайте pagefile на боевых машинах: без него у вас низкий commit-limit и падения при пиковой нагрузке. —
322
просмотров
3496
символов
Нет
эмодзи
Нет
медиа

Другие посты @fusa_zov_ru

Все посты канала →
📚 Эксперимент: как Windows «даёт» память — резерв vs подтве — @fusa_zov_ru | PostSniper