Показаны сообщения с ярлыком Расследования. Показать все сообщения
Показаны сообщения с ярлыком Расследования. Показать все сообщения

воскресенье, 9 октября 2011 г.

WSRM и память с точки зрения админа

Всем доброе время суток. Недавно столкнулся с windows system resource manager. Не то чтобы я раньше с ним не сталкивался. Просто как-то не задумывался над этим. Это средство позволяет, кроме всего прочего, задать некий набор ограничений процессам в операционной системе. В частности, возможно ограничение рабочего набора (working set), определенного процесса. В рамках этой заметки я хотел бы разобраться с тем, как это происходит. Не скрою, что в самый первый момент, когда я увидел, как срабатывает этот механизм – я удивился. Меня сразу затерзали сомнения.
Но все же, начнем. С небольшого теста. Используем программу testlimit, которую почему-то не распространяют с sysinternals suite. Это, кстати, тоже удивило меня, когда я попытался ее найти. Сначала настроим WSRM для нашего теста. Для этого нужно создать фильтр для приложения, в нашем случае это testlimit. А за тем – resource allocation policy, в которой мы и определим ограничения для процесса. Делаем вот таким образом:
1. Создаем новый фильтр
mem1mem2
2. Задаем новую политику выделения ресурсов, в которой задаем размер рабочего набора в 300МБ
mem3mem4
3. Активируем новую политику
mem5

Теперь запускаем приложение
mem6

Прежде всего следующая командная строка: Testlimit.exe -d 10 -c 100, выделяет 1 Гб памяти, и коснется ее, заставив систему предоставить реальную оперативную память приложению. Подробности об этом процессе смотрите вот тут. Как видно из скриншота – это и происходит. Размер рабочего набора – 1Гб. Но это длится всего несколько секунд. Затем происходит “странное”:
mem7

Бабах! Размер рабочего набора уменьшился до 300 МБ, заданных в настройках WSRM. Возникает вопрос – куда делать память? А что если в ней были данные? И как приложения отреагируют на такое поведение? Не станут ли они вдруг падать?
Для того, чтобы ответить на эти вопросы я написал вот такой вот код. Не плюйтесь, я не разработчик а админ, посему код может быть и не красивый:
// memtest1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
    char *a = (char*) malloc(1024*1024*1024);
    for (int k = 0; k<=100; ++k)    {
        for (int i = 0; i<=1024*1024*1024-1; ++i){
            a[i] = 'a';}
        
        std::cout << "allocated" << k << std::endl;
        Sleep (1000);
    }
    int g;
    std::cin >> g;
    return 0;
}

Данный код просто выделяет память, и активно ее использует – попросту пишет в нее. Теперь создаем новый фильтр,новую политику и запускаем приложение. После урезания рабочего набора приложение продолжает работать, как, собственно и ожидалось. Куда же оно пишет?

Для выяснения этого эпизода воспользуемся приложением RAMMap. Запускаем его и, сразу после запуска приложения testlimit видим следующую картинку:

до урезания
mem8

после урезания
mem9

Видим список активных страниц, и его размер в 3.5 ГБ. И, собственно Private Bytes  - 2.2 ГБ. Через некоторое время, когда сработает WSRM видим совсем другую картину. Размер памяти в списке активных страниц уменьшился на примерно 700МБ, а объем памяти обнуленных страниц вырос на эту цифру.  Итого, память не провалилась и никуда не исчезла, система переместила страницы из списка в список, предоставив при этом возможность другим приложениям употребить эту память. Однако есть один интересный момент. Testlimit не использует память а просто выделяет ее. Что будет, если эта память будет активно использоваться? Вернемся к моему тестовому коду для этого, и посмотрим, что покажет RAMMap. А показывает он вот что:

до урезания
mem10

после урезания
mem11

Картинка примерно та же. Но с некоторыми изменениями. При активном использовании памяти страницы не могут попасть в список обнуленных страниц, поскольку они используются. Таким образом система перемещает часть страниц рабочего набора в список измененных страниц. При этом при дальнейшей работе с памятью размер рабочего набора не изменяется. Тут есть один важный нюанс. Сам факт перемещения данных процесса в список модифицированных страниц говорит о том, что будет подкачка, поскольку вернуть страницы в рабочие наборы можно только освободив их и переместив в список свободных. Таким образом это урезание должно сопровождаться ростом дисковых операций, а так же увеличением счетчиков промахов памяти и подкачки, что и наблюдается:

mem13mem14

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

воскресенье, 6 июня 2010 г.

Проблема с Outlook 2003 и загрузкой диска.

И снова здравствуйте. Уже очень давно ничего не писал. То не находил времени, то желания. К сожалению порой лень сильнее меня. Как жаль, что никто еще не придумал никакой “золотой таблетки” от лени. Вот, чтобы выпил, и все. Никакой лени или плохого настроения.

В общем, в этой заметке хочу вкратце рассказать об одной интересной ситуации, случившейся на днях. Один из компьютеров моей организации вдруг ни с того ни с сего начал жутко тормозить. Причем пользователь жаловался, что не может работать с почтой. Клиентом, в нашем случае, является outlook 2003. Придя к пользователю я сразу обратил внимание на то, что лампочка активности жесткого диска постоянно горит. Трещащие звуки самого диска были слышны постоянно. При этом, как и следовало ожидать, скорость отклика системы была очень медленной. Я задумался: как можно узнать какой процесс в этом виноват? Меня сразу посетила мысль о process explorer. С его помощью это можно сделать довольно легко. Для этого нужно добавить дополнительные колонки.


IO

К сожалению на рассматриваемой машине мне не удалось сделать нужных скриншотов. По этому я публикую только те, что сделал на своей. Итак, на рисунке видно, какие колонки стоит добавить для того, чтобы обнаружить, какой процесс генерирует большое количество IO операций. Отсортируем отображение по этим колонкам и, вот оно, outlook в верху списка. Мало того, при попытке закрыть приложение его окно пропало, а процесс остался, генерируя дикий IO. Вот и причина тормозов. Мало того, пользователь ведь думает, что раз окно пропало – приложение закрыто. Я подождал еще с пару минут в надежде что outlook закроется. Но нет, не закрылся. Пришлось убить вручную. Долго думать о причинах такого поведения не пришлось. При старте он выдавал сообщение о неправильном закрытии файла личных папок и я решил что вся проблема в нем. Я просто создал еще один файл личных папок, перезапустил outlook и перенес все содержимое старого файла в новый. Процесс длился около получаса, в результате чего новый файл стал размером в 3ГБ хотя старый был всего 1,6ГБ. После окончания переноса я отключил старый файл, оставив только новый. Еще пара проверок и, ура, проблема исчезла.

четверг, 14 января 2010 г.

Казус с Scheduled Tasks, или вред не спланированных решений

Не создаются задания! Ужас, причем поведение дико странное. При попытке создать задание ntbackup просто сваливается в … dr. Watson. Примерно вот так

ntackupError1

ntackupError2

Это же потеря потерь!  И тут я вспомнил, что некоторое время назад для борьбы с kido, который среди прочего создавал задания удаленно, чем и распространялся, было принято решение изменить права на папку %systemroot%\tasks. Это решение, как водится, не было должным образом протестировано. Что несомненно послужит наукой. Изменение прав доступа было осуществлено, как водится, глобальной политикой. Вот это обстоятельство и сбило меня с сначала толку. На OU с сервером, на котором я пытался создать задачу эта политика не применялась! Однако еще при инсталляции и вводе в домен сервер бывал в тех OU, на которые она таки применялась. И действительно, применилась. Через стандартный explorer нельзя увидеть настройки этого каталога. Однако есть сacls и icacls. Пришлось изменять права вручную. Вот такой вот SDDL строкой:
D:P(A;OICIIO;FA;;;CO)(A;;0x1200ab;;;BO)(A;;0x1200ab;;;SO)(A;OICI;FA;;;BA)(A;OICI;FA;;;SY).

Вывод: всегда проверяйте, если не уверены, что побочных эффектов не будет.

среда, 13 января 2010 г.

Не запускается сервис WIN-RM

Вроде бы все хорошо. Вновь установленный сервер. Введен в домен. Ничего на него не ставилось, чист, как юная девственница. Устанавливаем ws-management core framework. Все, вроде бы чудесно. Выполняем enable-psremoting. И тут странный облом. Ошибка. В логах вот такое сообщение:

winrm_error

О ужас. Что же делать? Недолгое гугление приводит вот к таким результатам. А именно, сервис WIN-RM стартует под аккаунтом network service. Одна из доменных политик изменила политику Log on as a service (SeInteractiveLogonRight) так, что этот аккаунт потерял эту привилегию. Соответствующая корректировка сразу решила все проблемы.

Вот правильные настройки для network service account.

Privilege Source

Replace a process-level token (SeAssignPrimaryTokenPrivilege)

Explicit assignment

Adjust memory quotas for a process (SeIncreaseQuotaPrivilege)

Explicit assignment

Generate security audits (SeAuditPrivilege)

Explicit assignment

Bypass traverse checking (SeChangeNotifyPrivilege)

Through membership in the Everyone group

- Access this computer from the network (SeNetworkLogonRight)

Through membership in the Everyone group

- Log on as a batch job (SeBatchLogonRight)

Through membership in the Everyone group

- Log on as a service (SeInteractiveLogonRight)

Explicit assignment

- Impersonate a client after authentication

Through membership in the Everyone group

среда, 5 ноября 2008 г.

Случай с тормозящим Explorer

Недавно заметил у себя на машине такую штуку. Ни с того ни с сего загрузка процессора подскочила до 50%. Странность, подумалось мне. Запускаю любимый process explorer. Процесс explorer загружает процессор на 50% .



Что же это может быть? Легким движение руки открываем потоки процессаи видим, как один из потоков создает эту нагрузку. Еще одно движение - смотрим стек.



Судя по всему проблема где-то в TortoiseSVN, а может быть конкретно в его модуле для explorer. Думаю, чтоит скачать и поставить последнюю версию этого продукта. Пока же, просто убиваем этот поток. И наблюдаем дальше.

пятница, 24 октября 2008 г.

А знаете ли вы что ... №2

Антивирусы и халява. Оказывается есть халявные, то есть бесплатные антивирусы. Верней не совсем антивирусы, а сканеры. От Касперского например. Не знаю, как часто это чудо обновляется, и как долго длится или продлится халява. Судя по моим наблюдениям оно довольно часто обновляется. Называется оно Kaspersky AVP Tool. Довольно удобно, когда нет стационарного ативируса. Есть такое е же счастье и у других производителей антивирусного ПО, что позволяет боротся со зловредами комплексно :)
И вообще, очень рекомендую почитать вот эти правила. Единственное с чем я тут никак не могу согласиться - это с предложением отключить автоматическое восстановление системы. Мне думается, что это требование вызвано невозможностью удалить файлы в хранилище временного восстановления. А происходит это просто из-за отсутствия прав. Побороть это, и получить права на работу с файлами в хранилище временного восстановления можно, запустив проверялку с правами системы. Сделать это можно просто:

psexec -i -s <имя проверяльщика>

Для этого вам нужно иметь psexec а лучше pstools целиком.

четверг, 23 октября 2008 г.

А знаете ли вы что ...

Случаются ситуации что сервер печати начинает печатать медленно. Особенно если он обслуживает целую кучу принтеров, да еще и служит при этом файловым сервером. Это происходит по простой причине. Не хватает скорости дисковой подсистемы. Что тут можно сделать? Оказывается, можно попробовать перенести папку пула заданий на другой диск или массив. Сделать это можно в настройках сервера печати


среда, 22 октября 2008 г.

Случай с зависанием ИЕ. Часть вторая

В прошлый раз я написал, что победил тормозящий эксплорер. Как бы не так. Не прошло и получаса как проблема вернулась. Поэтому сегодня я решил взяться за нее с новыми силами. Итак, первым делом, я, как водится, запустил process explorer от имени системы, при помощи утилиты psexec.

psexec -i -s procexp

Поднял его приоритет и стал пытаться все таки заглянуть в процесс IE. Однако эти попытки не увенчались успехом. Единственное, что периодически успевало появляться до появления тормозов, это процесс IE съевший более 90% процессора. Затем тормоза - и дальше уже запущеный браузер.


Всякого рода ужимки и прыжки с повышеним приоритета process explorer никак не помогали мне. И тут, во время одного из запусков и очередного пролета попытки попасть внутрь я обратил внимание на окошко IO Bytes history. В нем было видно, что в момент тормозов повышалась активность антивируса Symantec.



К сожалению скриншот этого я не снял, поэтому тут просто это самое окошко. Как пример :). Итак, что же делать? Я сделал suspend всем потокам антивируса.



И не успел запустить IE в очередной раз, как он породил процесс, и сдох, выдав ошибку и сгенерив лог доктора ватсона. УРА! Я быстро сказал suspend этому процессу и вошел в его свойства.



Тут нарочно отсутствует имя пользователя. Так что не пугайтесь на самом деле оно есть :). Мне подумалось , что это "вирус", ну или как это моно сейчас говорить spyware. Поэтому я решил натравить на каталог с этим файлом другие антивирусы. Красным моргнул только NOD32, и тот не распознал его по человечески. Бесплатная утилита от Dr. Web, и Kaspersky 7 тихо мирно проспали этот файл. К слову говоря в этой папке лежал еще один такой-же, только с другим именем. Более менее человеческое имя дал ему только AVZ4. Trojan-Dropper.Win32.Agent.xjz. Гугл о нем ничего человеческого не знал. Пришлось задуматься. Что же делать? Обеденный перерыв и перекус придал мне сил, и я заглянул на вкладку Strings свойств процесса. И тут я обнаружил кучу интересных строк. К слову говоря мне повезло что они оказались не зашифованы.



Судя по этим строкам я предположил, что тут указаны точки старта этого зловреда. Поиск по реестру по этому GUID подтвердил мою догадку, так же пояснив строку WebCheck. Под этим именем это счастье пряталось в реестре. Autoruns показал те же самые точки, что нашлись руками. Грех было их не удалить :). Потом мое внимание привлекло имя библиотеки. Поиск при помощи process explorer'а сообщил не радостный результат. Она загружена во многих процессах. Беглое ее изучение при помощи strings показало, что это действительно что-то, чего не должно тут быть.



Судя по всему эта библиотечка каким-то образом воздействкт на указанные процессы и что-то пытяется украсть от webmoney. Беглый просмотр этой библиотечки при помощи дизассемблера сказал, что она отслеживает некоторые ключи реестра и ведет счетчик. Правда зачем - разбираться уже не очень хотелось. Пришло время его убить. Прежде всего я полез в каталог к библиотекам. Они лежали в system32. Оказалось, что библиотечек этих накопилось уже много, начиная с msvcrt57.dll и аж до msvcrt60.dll. Однако использовалась только последняя. Их никто не держал - поэтому переименовать их ничто не помешало. Потом они были отправлены в архив - во избежание. Следом за этим был убит незапущеный второй файл зловреда. А потом убит спящий процесс, и его файл. Перезагрузка. Новые файлы по старым путям не появились. Библиотеки тоже. IE стал запускаться без тормозов. Библиотек с подобными именами не появилось в процессах. Вроде победа. Но на этот раз торопиться с выводами не буду. Посмотрим, что станет завтра :)

вторник, 21 октября 2008 г.

Случай с кучей проблем

Для начала небольшое вступление. Сегодня мне в руки попала система с Windows 2000 sp4. Основной жалобой было то, что при старте появляются окошки с ошибками. И при закрытии одного из них система перегружается.





















На этом странности не заканчиваются. Попытка запустить runas или cmd приводит к штатной перезагрузке. Как будто происходит стандартное завершение работы. Загрузка в защищённом режиме мало чем помогает. CTRL+A+D завешивают систему. Антивирус в системе Symantec Corporate Edition 10.
Ну что ж, подумалось мне. Приступим к борьбе.
Запустить из сессии пользователя при помощи командной строки procexp мне не удалось. Система отправлялась в ребут. Поэтому запустил так. При помощи полезной функции process explorer определил, какой поцесс создал окно ошибки.








Этим приложением оказалось одно из приложений для работы с принером hp lj 1200. Подозреваю, что данная проблема возникает всвязи с отсутствием прав у пользователя. Поскольку под пользователем с правами админа такого не возникает. Решил не мучаться с поиском объектов, к которым нужно раздать права, и посему снес его полностью. Это решило проблему с соотвествующим окошком. Но не помогло с остальными проблемами. Посмотрев внимательно на список процессов в procexp я увидел там странные процессы, под названиями lsass winlogon и тд, крутящиесе не там где надо, не под тем пользователем, под которым надо. в общем - не те. Посмотрел где лежат их имиджи. И при заходе в эту папку антивирусник вдруг очнулся! ВИРУСЫ!!! Верней трояны, хотя в данном случае это не критично. Все это счастье лежало во временных папках профиля. Другой антивирус по сетке был натравлен на папку с профилями. А так же удалены все временные файлы и папки из всех профилей. Потом при помощи autoruns были почищены точки старта от всяких странных и подозрительных вещей. Антивирус тем временем чот нашел и пришиб. И, это, как ни странно помогло. Симптомы прошли. Пришло счастье :)

Случай тормозов с IE

Вчера наблюдал странное поведение IE. При его запуске система начинает жутко тормозить. Эти тормоза продолжаются где-то минут 10. Потом работа возобновляется вплоть до следующего обращения к IE. При этом запущенный process explorer практически зависает вместе с машиной. Список процессов практически не обновляется. Запущеный IE появляется в списке процессов практически 1 раз из 10 запусков. И во время тормозов его состояние посмотреть не удается. Самое интересно, что сие наблюдается только у одного пользователя. Под другими - все нормально.






Посему решил пойти другим путем. И этот путь - не переинсталляция :). Запустил autoruns и отключил все его дополнительные dll-ки, надстройки и тулбары. А так же прошелся по всему списку и снял галки с записей, которые были помечены как "File not found". Проблемы прошли. Во всяком случае пока.