Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Операционные системы

Добавлен: 29.10.2018

Просмотров: 22708

Скачиваний: 610

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Зависание и плохая производительность  

Глава 17  423 

eax=61192840 ebx=00000080 ecx=0000000f edx=00000074 esi=7c829e37 edi=40100080
eip=7c82860c esp=61191c40 ebp=61191cdc icpl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!Ki FastSystemCall Ret:
7c82860c c3               ret

0:223> knL
 # ChildEBP  RetAddr
00 61191c3c  7c826e09 ntdll!KiFastSystemCall Ret
01 61191c40  77e649ff ntdll!ZwCreateFile+0xc
02 61191cdc  608c6b70 kernel 32!CreateFileW+0x377
WARNING: Stack unwind information not available. Following frames may be wrong.
03 61191cfc  7527e1a6 SAVFMSEVSAPI+0x6b70
04 00000000  00000000 0x7527e1a6

Как иногда бывает, отладчик не знал, как интерпретировать стек, встретив 

фрейм, указывающий на Savefmsevsapi — образ, для которого не смог полу-
чить символы. Символы для большинства образов Microsoft опубликованы 
на сервере символов Microsoft, а значит, это, скорее всего, была сторонняя 
библиотека DLL, загруженная в процесс Store.exe, на которую и пало подо-
зрение. Команда lm, выводящая список модулей и информацию о версиях и 
путях загруженных образов, показала, что Savfmsevsapi — часть программы 
антивирусной защиты почты от Symantec:

0:000> lmvm SAVFMSEVSAPI
start     end            module name
608c0000  608e9000       SAVFMSEVSAPI T  (no symbols)
    Loaded symbol   image file:   SAVFMSEVSAPI.dll
    Image path:  C:\Program Files\Symantec\SMSMSE\6.0\Server\SAVFMSEVSAPI.dll
    Image path:  C:\Program
    Image name:  SAVFMSEVSAPI.dll
    Timestamp:        Wed Jul 08 03:09:42 2009 (4A547066)
    CheckSum:         00033066
    ImageSize:        00029000
    File version:     6.0.9.286
    Product version:  6.0.9.286
    File flags:       0 (Mask 0)
    File OS:          10001 DOS Winl6
    File type:        1.0 App
    File date:        00000000.00000000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

Эндрю проверил другие дампы, и нашел в них то же самое. Все указывало 

на виновника — программу от Symantec. Эндрю, с разрешения администра-
тора, отправил дампы и результаты анализа в службу поддержки Symantec. 
Через несколько часов оттуда сообщили, что дампы действительно указы-
вают на проблему с последней версией антивируса, и прислали исправле-
ние ошибки. Администратор установил его и продолжил мониторинг, чтобы 

SIN_ch_17.indd   423

27.12.2011   14:41:30


background image

424  Часть 

III   

Поиск и устранение сбоев: загадочные случаи

убедиться в устранении проблемы. Производительность вернулась на обыч-
ный уровень, а длинные задержки исчезли.

Однако через какое-то время администратор стал получать жалобы от 

некоторых пользователей Outlook на единичные случаи зависания длитель-
ностью до минуты. Эндрю попросил прислать соответствующий 12-часовой 
журнал Performance Monitor, но в этот раз очевидной аномалии не было.

Предполагая, что зависания будут видны в истории использования ЦП 

процессом Store.exe, он удалил все счетчики, кроме счетчика ЦП, и обна-
ружил три скачка в утренние часы, когда пользователи начинали входить в 
систему и повышать нагрузку на сервер (рис. 17-29).

Рис. 17-29.  Скачки использования ЦП процессом Store.exe примерно в 8:30 утра

Поскольку сервер был восьмиядерным, диапазон значений счетчиков 

утилизации ЦП процессом был 0–800, так что скачки были далеки от того, 
чтобы замедлить систему, но они были явно выше обычного. При дальней-
шем рассмотрении и масштабирования вертикальной шкалы для выделе-
ния скачков Эндрю обнаружил, что средняя загруженность ЦП всегда была 
ниже 75% одного ядра, а пики длились 15-30 секунд (рис. 17-30).

Обычная загруженность < 75%

> 10 секунд

Рис. 17-30.  Просмотр пиков использования ЦП

SIN_ch_17.indd   424

27.12.2011   14:41:30


background image

Зависание и плохая производительность  

Глава 17  425 

Что делал сервер Exchange во время пиков? Они были слишком ко-

роткими и случайными по амплитуде, чтобы администратор смог запу-
стить ProcDump и получить необходимые дампы. К счастью, я разработал 
ProcDump с учетом именно такой ситуации и предусмотрел поддержку не-
скольких условий создания дампа. Например, можно настроить ProcDump 
для генерации дампа процесса, когда тот завершается, или когда его закры-
тая память превышает определенный объем, и даже когда достигается ука-
занное значение счетчика производительности. Однако основное условие 
запуска — превышение процессом указанного порога утилизации ЦП в те-
чение указанного промежутка времени.

Из журнала Performance Monitor Эндрю получил информацию, необхо-

димую для составления условия получения дампов при возникновении пи-
ков использования ЦП:

procdump.exe -n 20 -s 10 -c 75 -u store.exe c:\dumps\store_75pc_10sec.dmp

С такими параметрами ProcDump генерирует дамп процесса Store.exe, 

когда использование ЦП этим процессом превышает 75% (-c 75) для одного 
ядра (-u) в течение 10 секунд (-s 10). Перед завершением работы генери-
руется 20 дампов (-n 20) в папке C:\Dumps под именами, начинающимися 
с «store_75pc_10sec». Администратор выполнил эту команду, перед уходом 
дамой, а на следующее утро имел 20 дампов. Он отправил их Эндрю, кото-
рый просмотрел их в отладчике Windbg по очереди.

Когда Procdump генерирует дамп по условию о превышении использо-

вания ЦП, в файле дампа устанавливается контекст потока, потреблявшего 
наибольшее количество ресурсов ЦП во время создания дампа. Поскольку 
команды отладчика для выгрузки дампа стека выполняются в контексте те-
кущего потока, достаточно просто выполнить их для просмотра стека про-
цесса, с наибольшей вероятностью вызвавшего пик утилизации ЦП. Больше 
половины дампов не содержали полезной информации, так как были полу-
чены уже после скачка, или когда выполнялся код, явно не имеющий отно-
шения к проблеме. Однако в нескольких дампах были данные, аналогичные 
показанным на рис. 17-31.

Рис. 17-31.  Стек Store.exe c инструкцией store!TWIR::EcFindRow+0xae

SIN_ch_17.indd   425

27.12.2011   14:41:30


background image

426  Часть 

III   

Поиск и устранение сбоев: загадочные случаи

Выделенный на рисунке фрейм указывает на функцию Store EcFindRow

что говорит о том, что пики вызваны длительными запросами к базе данных. 
Такого рода запросы выполняются, когда Outlook обращается к папке почто-
вого ящика, содержащей тысячи элементов. Эндрю предложил администрато-
ру проверить большие почтовые ящики и дал ссылку на статью службы под-
держки Exchange, в которой рассказывается, как делать это в каждой из вер-
сий Exchange (http://msexchangeteam.com/archive/2009/12/07/453450.aspx).

Созданный сценарий показал, что у нескольких пользователей в пап-

ках хранятся десятки тысяч писем. Администратор попросил этих поль-
зователей оставить не более 5000 писем (это рекомендованное число для 
Exchange 2003, в каждой версии оно увеличивается, и для Exchange 2010 со-
ставляет 100000), заархивировав их, удалив или переложив в другие папки. 
Через пару дней пользователи привели свои почтовые ящики в порядок и 
жалобы полностью исчезли, а последующий мониторинг показал, что про-
блема устранена.

Так ProcDump помог распутать сложный случай с зависанием Outlook.

SIN_ch_17.indd   426

27.12.2011   14:41:31


background image

Глава 18

Вредоносные программы

Вредоносные программы являются причиной многих компьютерных про-
блем. По определению они всегда выполняют действия, нежелательные для 
пользователя. Иногда они пытаются сделать это по-тихому, чтобы пользо-
ватель не заметил их, а иногда — явно, как описано в разделе «Дело о вре-
доносном ПО, завершающем процессы» этой главы. Как и многие обычные 
программы, вредоносные программы нередко содержат ошибки в коде. Но, в 
отличие от большинства нормальных программ, вредоносные часто активно 
препятствуют их обнаружению и удалению.
•  Случай с вирусом, блокирующим утилиты Sysinternals, интересен, по-

тому что касается программы, целенаправленно блокирующей запуск 
утилит Sysinternals. Естественно, проблема была решена с помощью ути-
лит Sysinternals.

•  Случай с вирусом, завершающим процессы произошел, когда мы закан-

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

•  Случай с поддельным компонентом системы демонстрирует использо-

вание утилиты Strings для поиска вредоносного ПО.

•  Случай с таинственной точкой ASEP описывает вирус, создающий соб-

ственную точку расширения автозапуска (Auto-start Extensibility Point, 
ASEP). Проблема решена при помощи ListDLLs, Procmon, Procexp и 
Autoruns.

Вирус, блокирующий утилиты Sysinternals

Знакомый попросил одного пользователя утилит Sysinternals взглянуть на 
систему, подозревая, что она заражена. Запуск и вход в систему происходи-
ли очень долго, а поиск с помощью Microsoft Security Essentials никогда не 
доходил до конца. Пользователь поискал необычные процессы в Диспетчере 
задач, но ничего особого не нашел.

SIN_ch_18.indd   427

27.12.2011   14:42:24