У моего клиента есть виртуальный терминальный сервер Server 2008 R2, работающий под управлением ESXi 5.1.
Этот сервер, который находится в производстве около 4 месяцев, испытывает периодическую медленную работу / отсутствие реакции у вошедших в систему пользователей. Когда возникает эта проблема iexplore.exe
процессы (32- и 64-разрядные) используют очень высокий ЦП и ОЗУ.
Снимок экрана: Диспетчер задач Windows: вкладка «Процессы»
Снимок экрана (сделанный не во время первого снимка экрана): Диспетчер задач Windows: вкладка «Производительность»
(Эти два скриншота были сделаны в разное время)
Есть идеи, как решить эту проблему навсегда?
У нас есть несколько терминальных серверов, используемых клиентами, однако это первая TS, которую мы развернули под VMware. Остальные наши терминальные серверы находятся либо под XenServer, либо на физическом уровне. Может ли это быть проблемой с VMware?
Итак, вы говорите мне, что гостевая ОС использует существенно разный объем памяти в зависимости от того, под каким гипервизором она работает, при идентичной рабочей нагрузке? Не думаю, что куплюсь на это ...
Одна очевидная проблема, которую я вижу, заключается в том, что Internet Explorer, очевидно, является очень интенсивно используемым приложением на вашем сервере терминалов, однако вы используете смесь 32-битных и 64-битных экземпляров Internet Explorer. Проблема заключается в том, что память с копированием при чтении / записи и другие методы общей памяти, которые обычно приносят пользу терминальному серверу, когда несколько сеансов запускают одно и то же приложение, заключаются в том, что они теряют эти методы оптимизации; их нельзя использовать в 32- и 64-битных версиях. Если вы стандартизируете всех своих пользователей в 32- или 64-битном Internet Explorer, общее использование памяти будет меньше.
Запуск приложения
После входа пользователя в систему для пользователя отображается рабочий стол (или приложение, если оно находится в режиме одного приложения). Когда пользователь выбирает 32-разрядное приложение для запуска, команды мыши передаются на сервер терминалов, который запускает выбранное приложение в новом пространстве виртуальной памяти (приложение размером 2 ГБ, ядро размером 2 ГБ). Все процессы на сервере терминалов по возможности будут совместно использовать код в режимах ядра и пользователя. Чтобы обеспечить совместное использование кода между процессами, диспетчер виртуальной памяти Windows NT использует защиту страницы от копирования при записи. Когда несколько процессов хотят читать и записывать одно и то же содержимое памяти, диспетчер виртуальных машин назначает защиту страницы от копирования при записи для области памяти. Процессы (сеансы) будут использовать одно и то же содержимое памяти до тех пор, пока не будет выполнена операция записи, после чего диспетчер виртуальных машин скопирует физический фрейм страницы в другое место, обновит виртуальный адрес процесса, чтобы он указывал на новое местоположение страницы, и теперь отметит страница как чтение / запись. Копирование при записи чрезвычайно полезно и эффективно для приложений, работающих на сервере терминалов.
Когда приложение на основе Win32, такое как Microsoft Word, загружается в физическую память одним процессом (сеансом), оно помечается как копирование при записи. Когда новые процессы (сеансы) также вызывают Word, загрузчик изображений просто указывает новым процессам (сеансам) на существующую копию, поскольку приложение уже загружено в память. Когда требуются буферы и пользовательские данные (например, сохранение в файл), необходимые страницы будут скопированы в новое место физической памяти и помечены как чтение / запись для отдельного процесса (сеанс). Диспетчер виртуальных машин защитит это пространство памяти от других процессов. Однако большая часть приложения представляет собой общий код и будет иметь только один экземпляр кода в физической памяти независимо от того, сколько раз он запускается.
> Предпочтительно (хотя и не обязательно) запускать 32-разрядные приложения в среде сервера терминалов. 32-разрядные приложения (Win32) позволят совместно использовать код и работать более эффективно в многопользовательских сеансах. Windows NT позволяет запускать 16-разрядные приложения (Win16) в среде Win32, создавая виртуальный компьютер на базе MS-DOS (VDM) для выполнения каждого приложения Win16. Весь 16-битный вывод транслируется в вызовы Win32, которые выполняют необходимые действия. Поскольку приложения Win16 выполняются в собственном модуле VDM, код не может совместно использоваться приложениями в нескольких сеансах. Трансляция между вызовами Win16 и Win32 также потребляет системные ресурсы. Запуск приложений Win16 в среде сервера терминалов потенциально может потреблять вдвое больше ресурсов, чем сопоставимое приложение на основе Win32.