Выделение памяти windows 2003
Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память ( virtual memory ). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти.
Название "виртуальная" произошло из-за того что процессу неизвестно реальное (физическое) расположение памяти – она может находиться как в оперативной памяти ( ОЗУ ), так и на диске. Операционная система предоставляет процессу виртуальное адресное пространство (ВАП, virtual address space ) определенного размера и процесс может работать с ячейками памяти по любым виртуальным адресам этого пространства, не "задумываясь" о том, где реально хранятся данные.
Размер виртуальной памяти теоретически ограничивается разрядностью операционной системы. На практике в конкретной реализации операционной системы устанавливаются ограничения ниже теоретического предела. Например, для 32-разрядных систем ( x86 ), которые используют для адресации 32 разрядные регистры и переменные, теоретический максимум составляет 4 ГБ (2 32 байт = 4 294 967 296 байт = 4 ГБ). Однако для процессов доступна только половина этой памяти – 2 ГБ, другая половина отдается системным компонентам. В 64 разрядных системах (x64) теоретический предел равен 16 экзабайт (2 64 байт = 16 777 216 ТБ = 16 ЭБ). При этом процессам выделяется 8 ТБ, ещё столько же отдается системе, остальное адресное пространство в нынешних версиях Windows не используется.
Введение виртуальной памяти, во-первых, позволяет прикладным программистам не заниматься сложными вопросами реального размещения данных в памяти, во-вторых, дает возможность операционной системе запускать несколько процессов одновременно, поскольку вместо дорогого ограниченного ресурса – оперативной памяти, используется дешевая и большая по емкости внешняя память .
Реализация виртуальной памяти в Windows
Схема реализации виртуальной памяти в 32-разрядной операционной системе Windows представлена на рис.11.1. Как уже отмечалось, процессу предоставляется виртуальное адресное пространство размером 4 ГБ, из которых 2 ГБ, расположенных по младшим адресам (0000 0000 – 7FFF FFFF), процесс может использовать по своему усмотрению (пользовательское ВАП), а оставшиеся два гигабайта (8000 0000 – FFFF FFFF) выделяются под системные структуры данных и компоненты (системное ВАП) 1 Специальный ключ /3GB в файле boot.ini увеличивает пользовательское ВАП до 3 ГБ, соответственно, уменьшая системное ВАП до 1 ГБ. Начиная с Windows Vista вместо файла boot.ini используется утилита BCDEDIT. Чтобы увеличить пользовательское ВАП, нужно выполнить следующую команду: bcdedit /Set IncreaseUserVa 3072. При этом, чтобы приложение могло использовать увеличенное ВАП, оно должно компилироваться с ключом /LARGEADDRESSAWARE. . Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.
Рис. 11.1. Реализация виртуальной памяти в 32-разрядных Windows
Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В Windows страницы бывают большие ( x86 – 4 МБ, x64 – 2 МБ) и малые (4 КБ). Физическая память ( ОЗУ ) также делится на страницы точно такого же размера, как и виртуальная память . Общее количество малых виртуальных страниц процесса в 32 разрядных системах равно 1 048 576 (4 ГБ / 4 КБ = 1 048 576).
Обычно процессы задействуют не весь объем виртуальной памяти, а только небольшую его часть. Соответственно, не имеет смысла (и, часто, возможности) выделять страницу в физической памяти для каждой виртуальной страницы всех процессов. Вместо этого в ОЗУ (говорят, "резидентно") находится ограниченное количество страниц, которые непосредственно необходимы процессу. Такое подмножество виртуальных страниц процесса, расположенных в физической памяти, называется рабочим набором процесса (working set ).
Те виртуальные страницы, которые пока не требуются процессу, операционная система может выгрузить на диск , в специальный файл , называемый файлом подкачки (page file).
Каким образом процесс узнает, где в данный момент находится требуемая страница? Для этого служат специальные структуры данных – таблицы страниц ( page table ).
Структура виртуального адресного пространства
Рассмотрим, из каких элементов состоит виртуальное адресное пространство процесса в 32 разрядных Windows (рис.11.2).
В пользовательском ВАП располагаются исполняемый образ процесса, динамически подключаемые библиотеки ( DLL , dynamic-link library ), куча процесса и стеки потоков.
При запуске программы создается процесс (см. лекцию 6 "Процессы и потоки"), при этом в память загружаются код и данные программы (исполняемый образ, executable image ), а также необходимые программе динамически подключаемые библиотеки ( DLL ). Формируется куча ( heap ) – область, в которой процесс может выделять память динамическим структурам данных (т. е. структурам, размер которых заранее неизвестен, а определяется в ходе выполнения программы). По умолчанию размер кучи составляет 1 МБ, но при компиляции приложения или в ходе выполнения процесса может быть изменен. Кроме того, каждому потоку предоставляется стек (stack) для хранения локальных переменных и параметров функций, также по умолчанию размером 1 МБ.
Рис. 11.2. Структура виртуального адресного пространства
В системном ВАП расположены:
- образы ядра (ntoskrnl.exe), исполнительной системы, HAL (hal.dll), драйверов устройств, требуемых при загрузке системы;
- таблицы страниц процесса;
- системный кэш;
- пул подкачиваемой памяти (paged pool) – системная куча подкачиваемой памяти;
- пул подкачиваемой памяти (nonpaged pool) – системная куча неподкачиваемой памяти;
- другие элементы (см. [5]).
Переменные, в которых хранятся границы разделов в системном ВАП, приведены в [5, стр. 442]. Вычисляются эти переменные в функции MmInitSystem ( файл base\ntos\mm\mminit.c, строка 373), отвечающей за инициализацию подсистемы памяти. В файле base\ntos\mm\i386\mi386.h приведена структура ВАП и определены константы , связанные с управлением памятью (например, стартовый адрес системного кэша MM_SYSTEM_CACHE_START , строка 199).
Выделение памяти процессам
1. WinAPI функция VirtualAlloc позволяет резервировать и передавать виртуальную память процессу. При резервировании запрошенный диапазон виртуального адресного пространства закрепляется за процессом (при условии наличия достаточного количества свободных страниц в пользовательском ВАП), соответствующие виртуальные страницы становятся зарезервированными ( reserved ), но доступа к этой памяти у процесса нет – при попытке чтения или записи возникнет исключение . Чтобы получить доступ , процесс должен передать память зарезервированным страницам, которые в этом случае становятся переданными ( commit ).
Отметим, что резервируются участки виртуальной памяти по адресам, кратным значению константы гранулярности выделения памяти MM_ALLOCATION_GRANULARITY ( файл base\ntos\inc\mm.h, строка 54). Это значение равно 64 КБ. Кроме того, размер резервируемой области должен быть кратен размеру страницы (4 КБ).
WinAPI функция VirtualAlloc для выделения памяти использует функцию ядра NtAllocateVirtualMemory ( файл base\ntos\mm\allocvm.c, строка 173).
2. Для более гибкого распределения памяти существует куча процесса, которая управляется диспетчером кучи ( heap manager ). Кучу используют WinAPI функция HeapAlloc , а также оператор языка C malloc и оператор C++ new . Диспетчер кучи предоставляет возможность процессу выделять память с гранулярностью 8 байтов (в 32-разрядных системах), а для обслуживания этих запросов использует те же функции ядра, что и VirtualAlloc.
Дескрипторы виртуальных адресов
Для хранения информации о зарезервированных страницах памяти используются дескрипторы виртуальных адресов ( Virtual Address Descriptors, VAD ). Каждый дескриптор содержит данные об одной зарезервированной области памяти и описывается структурой MMVAD ( файл base\ntos\mm\mi.h, строка 3976).
Границы области определяются двумя полями – StartingVpn (начальный VPN ) и EndingVpn (конечный VPN ). VPN ( Virtual Page Number) – это номер виртуальной страницы; страницы просто нумеруются, начиная с нулевой. Если размер страницы 4 КБ (212 байт ), то VPN получается из виртуального адреса начала страницы отбрасыванием младших 12 бит (или 3 шестнадцатеричных цифр). Например, если виртуальная страница начинается с адреса 0x340000, то VPN такой страницы равен 0x340.
Дескрипторы виртуальных адресов для каждого процесса организованы в сбалансированное двоичное АВЛ дерево 3 АВЛ дерево – структура данных для организации эффективного поиска; двоичное дерево, сбалансированное по высоте. Названо в честь разработчиков – советских ученых Г. М. Адельсон Вельского и Е. М. Ландиса. ( AVL tree ). Для этого в структуре MMVAD имеются поля указатели на левого и правого потомков: LeftChild и RightChild .
Для хранения информации о состоянии области памяти, за которую отвечает дескриптор , в структуре MMVAD содержится поле флагов VadFlags.
«Мало места на диске» - распространенная проблема дискового пространства в Windows Server 2003 во всех выпусках, многие люди не знают, как удалить предупреждение о нехватке места на диске, поэтому в этой статье я расскажу, как решить эту проблему, освободив место на диске в Windows Server 2003 (R2).
Windows Server 2003 Недостаточно места на диске
Windows создал предупреждение «Мало места на диске», чтобы предупреждать пользователей компьютеров, когда на их жестком диске заканчивается доступное дисковое пространство. Он также дает вам ярлык для освобождения места путем удаления старых или ненужных файлов.
Когда на диске C: не хватает места на диске, это вызывает много проблем, таких как:
- Вы не можете установить Windows обновить и подвергнуть сервер опасной ситуации.
- Нет свободного места для установки серверных служб или приложений.
- Перезагрузка сервера неожиданно.
- Сбой системы, когда свободного места очень мало.
Шаги, чтобы решить эту проблему
Чтобы полностью решить эту проблему, необходимо выполнить 3 основных шага.
- Узнайте, какие файлы занимают ваше свободное дисковое пространство.
- Освободите место в Windows 2003 Server и получите немного свободного места.
- Изменение размера разделов и расширение системы C: диск.
- Измените способ использования компьютеров.
Самый важный шаг освобождение дискового пространстваПосле получения свободного места вы можете временно решить эту неотложную проблему.
Кроме того Windows Обновления и сторонние программы, многие другие файлы также быстро занимают место на диске, например:
- Windows установка кешей, отчетов, логов и временных файлов.
- Windows точки резервного копирования и восстановления.
- Кэши браузера и временные файлы.
- Тайники и трата видео и музыки.
- Неверные или потерянные реестры и библиотеки DLL.
- Большое количество файлов на рабочем столе или в корзине.
Узнав эти файлы, вы узнаете, как освободить место на диске.
Освободите место в Windows Server 2003
Вы можете использовать встроенную в Server 2003 очистку диска или стороннее программное обеспечение для оптимизации. Но мне нравится использовать Disk Cleanup, потому что он простой и безопасный, способный удалять многие виды неиспользуемых файлов.
Освободите пространство с Windows Очистка диска
Открыть "Мой компьютер«, Щелкните правой кнопкой мыши раздел (обычный C), который вы хотите освободить, и выберите«Свойства«. На первой вкладке «Общие» нажмите «Очистка диска».
Через пару минут вы увидите список параметров, файлы которых можно безопасно удалить. Варианты варьируются от удаления файлов до сжатия старых файлов.
После его завершения вы можете переключиться на Дополнительные параметры вкладка для удаления неиспользуемых программ и удаления файлов восстановления системы и теневого копирования (очень большие файлы)
Вообще говоря, вы можете освободить большое количество дискового пространства.
Другие способы освободить место на сервере 2003
1. Переместите файлы подкачки
Щелкните правой кнопкой мыши «Мой компьютер>>Свойства", Перейти на вкладку"Advanced»> Настройки в Быстродействие > Advanced > Изменить.
Файл подкачки - это область на жестком диске, где Windows использует его в качестве оперативной памяти. Обычно этот файл подкачки находится на диске C и занимает до 1 или более ГБ. Идеально разместить этот файл на диске C, а не на других, потому что он быстрее обращается к нему из C. Сказав это, это не рекомендуемый шаг, но он работает.
Внимание: эта опция требует перезагрузки.
2. Отключить спящий режим
Гибернация обходится недешево - для нее требуется не менее 512 МБ в зависимости от вашей системы. Если вы включили эту опцию, отключите ее, и освободится больше свободного места на диске.
3. Удалите временные файлы браузера
Существует несколько основных браузеров, и возможность удаления файлов различна, я не могу описать все шаги, это пример в Microsoft Internet Explorer.
Последний шаг, проверьте, есть ли файлы в папке «Мои документы» и «Загрузить», особенно большие музыкальные или видеофайлы.
Шаги после освобождения дискового пространства
Потратив много времени на освобождение места, вы освободите часть дискового пространства, однако, если вы не можете получить достаточно свободного места или диск C был создан слишком маленьким, вы можете снова увидеть предупреждение о нехватке места на диске в ближайшем будущем.
Чтобы полностью решить эту проблему, вы можете рассмотреть:
- Измените способ, используя ваши жесткие диски. Многим гикам нравится хранить свои данные отдельно от операционной системы. Это облегчает создание резервных копий данных на разделе D: и облегчает замену или переустановку операционной системы на C:
- Измените путь загрузки и кэширования приложений по умолчанию на другой диск с данными.
- Освободите дисковое пространство регулярно.
- Разверните диск C со свободным пространством в других томах.
Настоятельно рекомендуется изменить размер раздела и расширить диск C. Если на любых других томах того же диска есть свободное место, вы можете перенести его на диск C, чтобы увеличить размер раздела. Чтобы сделать это, это очень легко, но вы должны выбрать безопасный раздел программного обеспечения. Надежная программа может вызвать сбой системы или потерю данных.
Файл подкачки страниц содержит страницы памяти, которые были вытеснены из оперативной памяти. Эти страницы сохраняются в системном файле, который называется pagefile.sys.
Файл хранится в корневом каталоге системного раздела. По умолчанию минимальный размер файла подкачки устанавливается равным 150 % от объема оперативной памяти.
Максимальный размер файла подкачки равен 300 % от объема оперативной памяти.
Для небольших систем с объемом оперативной памяти до 256 Мбайт файл подкачки можно оставить в системном разделе. Но для больших систем с несколькими гигабайтами оперативной памяти стоит принять меры по изменению размера и расположения файла подкачки страниц.
Перемещение файла подкачки на другой диск
Общая производительность системы может возрасти, если файл подкачки страниц разместить на "быстром" диске, который не связан с диском операционной системы. Система
может использовать до 16 файлов подкачки, расположенных на различных логических дисках. Рост производительности будет не заметен, если файлы подкачки не разместить на
Стоит оставить небольшой файл подкачки на загрузочном диске. Это связано с тем, что файл подкачки используется системой для хранения дампа памяти, создаваемого после
критической ошибки на уровне ядра (пресловутого "синего экрана смерти"). Сначала дамп памяти создается в файле подкачки, после чего при следующей перезагрузке копируется в специальный файл. Именно поэтому файл подкачки должен находиться в корневом каталоге системного раздела. Выполняемый файл, который осуществляет копирование, не имеет доступа к файловой системе и должен использовать непосредственные вызовы INT13, которые предоставляют доступ только к корневому каталогу загрузочного диска.
Необходимость создания дампа памяти может заставить администратора выделить очень большой участок дискового пространства (в случае, если на сервере установлен большой объем оперативной памяти). Как вариант можно настроить создание только той памяти, которая используется операционной системой. При этом можно сэкономить достаточно большой объем дискового пространства, а технические специалисты компании Microsoft получат более компактный файл для диагностики отказа системы. Можно даже включить создание дампа только стека (кучи). При этом размер дампа не превышает 64 Кбайт.
В большинстве ситуаций дампа стека (кучи) оказывается достаточно для получения информации о нормально работающих серверах. Если отказы сервера происходят достаточно часто, может потребоваться создание дампа памяти операционной системы или дампа всего пространства памяти. Скорее всего, на этом этапе придется связаться со службой поддержки продуктов Microsoft (Product Support Services Microsoft), и уже сотрудники этой службы сообщат, какой тип информации им нужен.
Процедура настройки системы для создания дампа памяти ядра
1. В Control Panel (Панель управления) откройте аплет System (Система).
3. Щелкните на кнопке Settings (Параметры) в разделе Startup and Recovery (Загрузка и
4. В разделе Write Debugging Information (Запись отладочной информации) выберите
параметр Kernel Memory Dump (Дамп памяти ядра) или Small Memory Dump (Малый дамп
Для удобства рассмотрения мы будем использовать скриншот Монитора ресурсов (рис. A), запущенного на производственном сервере под управлением Windows Server 2008 R2. На этом сервере установлен Exchange Server 2010 со всеми ролями, поэтому он очень активно использует оперативную память. Как и все другие наши серверы, этот работает в виртуальной машине на базе VMware vSphere 4.1.
Рисунок A. Монитор ресурсов в Windows Server 2008 R2 – вкладка «Сеть» (нажмите на изображении для увеличения).
Давайте посмотрим, какие сведения о памяти можно получить с помощью Монитора ресурсов на данном сервере Windows.
В разделе «Процессы» (Processes) на вкладке «Память» (Memory) собраны ключевые сведения об использовании оперативной памяти процессами. Вот какую информацию здесь можно найти:
• «Образ» (Image) – имя исполняемого файла. Это имя процесса, активно использующего память.
• «ИД процесса» (PID) – идентификатор процесса. Может пригодиться для управления процессами с использованием других утилит или для поиска процессов в Диспетчере задач (Task Manager).
• «Ошибок отсутствия страницы в памяти/сек.» (Hard Faults/sec). Такие ошибки иногда еще называют страничными (Page Fault). Ошибка отсутствия страницы в памяти – не обязательно критическая, но может указывать на нехватку оперативной памяти. Такая ошибка возникает всякий раз, когда система использует файл подкачки на диске. Это важный момент, поскольку диск работает намного медленнее оперативной памяти, что ощутимо снижает быстродействие. Если страничные ошибки возникают регулярно, и особенно если показатели высокие, следует задуматься о расширении объема оперативной памяти сервера.
• «Завершено (КБ)» (Commit (KB)) – общий объем физической и виртуальной памяти (файла подкачки), выделенной данному процессу.
• «Рабочий набор (КБ)» (Working Set (KB)) – объем физической памяти, выделенной данному процессу. Показатель в этом столбце должен быть равен сумме показателей в двух следующих столбцах, которые являются его составляющими.
• «Общий (КБ)» (Shareable (KB)) – общий объем выделенной данному процессу физической памяти, которая при необходимости может использоваться совместно с другим процессом.
• «Частный (КБ)» (Private (KB)) – общий объем выделенной данному процессу физической памяти, которая не может использоваться другими процессами.
Физическая память
Под разделом «Процессы» располагается раздел «Физическая память» (Physical Memory), в котором содержатся следующие сведения:
• «Используется» (In Use) – объем памяти, которая в данный момент используется.
• «Доступно» (Available) – сколько еще от общего объема физической памяти доступно для выделения.
• «Зарезервированное оборудование» (Hardware Reserved) – количество памяти, зарезервированной для различных устройств. Почти любой аппаратный компонент сервера может резервировать для себя память. На нашем сервере Exchange, как видно из рис. A, зарезервирован 1 Мбайт.
• «Изменено» (Modified). Данные записываются на страницы памяти и хранятся на них, пока в фоне происходит обработка другой информации. При обновлении данных в памяти эти страницы помечаются как измененные. Чтобы система могла использовать ресурсы памяти наиболее эффективно, страницы памяти, к которым давно не обращались, могут быть перенесены в следующую категорию:
• «Ожидание» (Standby). К этой категории относится память, содержащая кэшированные данные и код, которые в данный момент активно не используются, но могут потребоваться в обозримом будущем. Для управления этим классом памяти Windows присваивает каждой странице определенный приоритет. Когда у других процессов возникает потребность в оперативной памяти, страницы с низким приоритетом извлекаются из категории «Ожидание» и предоставляются процессам, которые в них нуждаются.
• «Свободно» (Free) – объем свободной памяти, которая никак не используется. Можно подумать, что столь ничтожный объем свободной памяти в системе, имеющей 16 Гбайт RAM, свидетельствует о наличии серьезных проблем, но на самом деле, это не так. Многие новые продукты Microsoft устроены таким образом, что для них куда продуктивнее использовать весь объем доступной оперативной памяти, чем позволять ей простаивать. Например, Exchange полностью использует всю доступную память, кэшируя определенные фрагменты данных для обеспечения быстрого доступа.
Распространенная ошибка – судить о состоянии системы только по показателям «Используется» и «Доступно» и беспокоиться, если определенный процесс потребляет слишком много памяти. Важно понимать, как именно должно себя вести то или иное приложение.
К примеру, Exchange 2010 зачастую использует весь объем доступной памяти, и это не случайно. Exchange старается кэшировать как можно больше данных для повышения быстродействия в целом. Поэтому чтобы определить, есть ли на сервере Exchange 2010 проблемы с памятью, необходимо учитывать и другие показатели, в том числе ошибки отсутствия страниц в памяти. Если служба не должна потреблять много памяти, но потребляет, требуется более тщательная диагностика. В этом случае может пригодиться Монитор производительности (Performance Monitor).
В заключение
Надеюсь, этот цикл статей о Мониторе ресурсов помог вам освоить новые способы мониторинга состояния Windows Server с помощью простого и бесплатного инструмента, который разработчики Microsoft встроили в операционную систему, чтобы облегчить администраторам диагностику проблем, связанных с производительностью.
Автор: Scott Lowe
Перевод SVET
Оцените статью: Голосов
Читайте также: