В мире столько еще загадок. Как на самом деле работает наш мозг? Кто и как построил пирамиды? Откуда взялся утконос? Почему же мой компьютер так медленно работает? Работа мозга, пирамиды и утконос пока подождут, а пока давайте-ка займемся медленным компьютером.
Компьютеры с неэффективными программным обеспечением — это чистый убыток, обусловленный снижением производительности пользователей, повышением потребления электроэнергии, сокращением срока службы аккумулятора, тепловым износом, отказами диска и многим другим. Проигнорировать проблематичное ПО не удастся — оно часто ведет к намного большим проблемам в смысле денежных и временных затрат.
Работая над Windows XP, специалисты Microsoft потратили много времени на то, чтобы интерфейсом области уведомлений панели задач Windows можно было управлять. К сожалению, многие разработчики программ неправильно использовали эту возможность:очень часто после входа в систему нового компьютера приходилось видеть в области уведомлений более 10 значков.
У всего есть своя стоимость, и у каждого значка, отображаемого в области уведомления, есть цена, причем речь идет не только о месте на рабочем столе. За каждым стоит работающее приложение. А в каждой новой версии Windows добавлялось еще больше служб, чем в предыдущей. Короче говоря, на компьютере работает много программ, будь то самостоятельно установленная ОС, приобретенная у независимого поставщика вместе с компьютером или установленная с помощью стандартного корпоративного образа системы.
Быстрее, еще быстрее
«Почему не загружается Windows?»— первый по популярности вопрос, задаваемый пользователями, а второй:«Почему мой компьютер так медленно работает и что сделать, чтобы исправить ситуацию?»
Если есть два компьютера, на которых применен один образ (особенно, когда на одной из машин наблюдаются проблемы), всегда интересно начать со сравнения этих двух систем, чтобы выяснить различия между ними. Использование обсуждаемых ниже инструментальных средств часто сильно упрощает обнаружение причины неполадок.
Говоря о ресурсах компьютера, стоит заметить, что есть четыре их вида, которые могут влиять на выполнение работы:
1. Оперативная память.
2. Процессор.
3. Дисковый ввод/вывод.
4. Сетевой ввод/вывод.
Нам потребуется набор программ Windows Sysinternals. Если он имеется, приступим к работе. В противном случае загрузите его со страницы загрузок Windows Sysinternals.
Прежде чем начать, давайте узнаем, какие программы работают на вашем компьютере. Средствами Sysinternals это можно узнать двумя способами. И оба зависят от того, в каком виде нужна информация и где вы находитесь относительно диагностируемого компьютера.
Процесс за процессом
Первый способ — использование утилиты Process Explorer (Procexp.exe).Это самый мощный вариант из двух, но ее можно запускать только локально (в отличие от другого, инструмента, о котором мы поговорим чуть позже). К Process Explorer лучше всего относиться, как к мощной замене Диспетчера задач Windows. Она позволяет увидеть сразу все процессы, выполняющиеся в системе, с очень подробной информацией о них, причем неважно, чьи процессы, — ваши или других вошедших в систему пользователей (в случае использования возможностей быстрого переключения пользователей или удаленного рабочего стола служб терминалов).
Прежде чем мы начнем, убедитесь, что Process Explorer работает в режиме отображения всех процессов, для чего утилиту нужно перегрузить, выбрав File/Show Details for all Processes (если включен контроль учетных записей, откроется соответствующее окно с подтверждением).
Выполнив сортировку по столбцу Process, можно определить, как должен отображаться список процессов — по убыванию или возрастанию или на основе отношений «родитель-потомок» среди приложений. Имейте в виду, что процесс может запуститься, загрузить другое приложение, после чего завершить работу, вводя в заблуждение относительно того, какой же процесс в действительности запустил того или иного потомка.
Самый простой способ увидеть, какой процесс потребляет больше всего процессорного времени, — навести мышку на график загрузки процессора — отобразится название самого «прожорливого» процесса. Найти этот процесс можно с помощью сочетания клавиш Ctrl+F.
Меня часто спрашивают:«Что это за процесс такой — “Бездействие системы”, и почему он потребляет практически все процессорное время на моем компьютере?» Так вот:он не потребляет процессор. Этот процесс лучше считать псевдонимом неиспользованного процессорного времени. Это даже не «настоящий» процесс. Если вам нужны подробности, почитайте книгу “Windows Internals” (Microsoft Press, 2009), в которой узнаете много нового о принципах внутренней работы Windows.
Есть два варианта решения проблемы:
- Выбор View/Update Speed позволяет задать, как часто Procexp должен обновлять «картинку» в соответствии с происходящим в ОС.
- Если надо понаблюдать за активно потребляющим процессорное время процессом и определить пиковую нагрузку, нажмите пробел. Procexp прекратит полностью обновлять данные, позволяя рассмотреть поближе «подозрительным» процесс.
Таким же манером легко выявить процесс, активно потребляющий память. Если не удается распознать процесс по имени (что вполне возможно, когда речь идет о вредоносном ПО), достаточно выбрать процесс и щелкнуть Process/Window — если у процесса есть пользовательский интерфейс, можно открыть окно приложения. У служб интерфейса нет, впрочем у некоторых приложений тоже.
«Служить и защищать»
Такой процесс диагностики хорошо подходит для приложений, выполняющихся в контексте пользователя, но что делать со службами или драйверами? Службы иногда трудно обнаружить, потому что все чаще они выполняются в «стандартном» процессе для экономии ресурсов и повышения безопасности.
В Windows эта проблема решается средствами службы по имени svchost.exe (таких процессов довольно много в любой ОС Windows, начиная с Windows XP). Многие из этих процессов — встроенные службы Windows, но эту инфраструктуру используют и сторонние разработчики. По сути, все чаще злонамеренное ПО также использует в качестве хоста процесс svchost.
Все так же можно обнаруживать экземпляры svchost, сильно нагружающие процессор или память. Дважды щелкните экземпляр svchost и в открывшемся окне на вкладке Services увидите DLL-библиотеки, выполняющиеся в этом общем процессе, а также те, что потребляют больше всего ресурсов.
А что насчет драйверов? Не нужно сбрасывать драйверы со счетов, исследуя причину снижения производительности системы. Они работают на самом низком уровне Windows и зачастую становятся источником проблем.
Драйверы часто используются для наблюдения за другими процессами, например это делает антивирусное ПО, или за уведомлениями файлов или каталогов, что выполняет то же антивирусное ПО, а также механизм репликации и синхронизации. Исключительно просто написать драйвер, создающий проблемы сам по себе или в присутствии другого драйвера. Вторая ситуация хуже, так как ее сложнее диагностировать.
Так где же «живут» драйверы? Как и службы, размещающиеся в процессах svchost.exe, драйверы также работают в общем процессе. Если дважды щелкнуть процесс System и открыть вкладку Threads, вы увидите стек загруженных потоков. Многие из них являются драйверами (это файлы с расширением .sys).
Как список процессов, список потоков можно отсортировать по потреблению процессорного времени. Так можно найти потоки конкретного драйвера, сильно нагружающего процессор. После этого можно найти драйвер в системе, поискать в Интернете или связаться с поставщиком, чтобы узнать, в курсе ли он неполадок своего драйвера, или загрузить более новую версию драйвера.
Когда при удаленном подключении к компьютеру для диагностики можно подключиться через сеть, но не средствами удаленного стола службы терминалов, тогда на помощь приходит набор PsTools. А именно PsList. Это утилита командной строки (она входит в набор Sysinternals), перечисляющая все процессы на локальной или удаленной машине.
Как и все утилиты группы PsTools, PsList можно выполнять удаленно через службу «Общий доступ к файлам и принтерам» (File and Printer Sharing) при условии, что она включена, а у вас есть права члена группы локальных администраторов. Как и в Procexp, вы увидите список всех процессов, выполняющихся в данный момент. Предоставляемая утилитами PsTools информация более ограничена, но в случаях, когда нужна диагностика проблемного прикладного процесса, информации обычно достаточно.
На локальной машине достаточно просто запустить PsList в командной строке.Параметр -t позволяет отобразить процессы в виде дерева, как в Procexp. Добавив параметр -s (интервал в секундах) можно задать период обновления информации. В Procexp все по-другому — там надо замедлять обновление. У всех утилит семейства PsTools одинаковый синтаксис использования на удаленной системе, вот пример:
PsTool.exe \\systemname -u username –p password
Procexp можно использовать для завершения процессов на локальной машине (но нужно соблюдать осторожность, чтобы случайно не повредить систему или не вызвать отказ приложения), а PsList — нет. Для принудительного завершения процесса можно задействовать PsKill, который завершает процесс по его идентификатору (PID) или имени (завершаются все процессы с заданным именем), выполняя эту задачу даже удаленно.
Диагностика неполадок дискового ввода/вывода (особенно приложений, требующих от системы постоянного поиска данных на жестком диске) сложна, а полноценный анализ иногда и попросту невозможен. Однако утилита Process Monitor (Procmon.exe) часто позволяет быстро найти службы или приложения слишком активно ведущие чтение или запись на жесткий диск. У многих приложений есть «законная» причина активно выполнять дисковый ввод/вывод, например утилиты локального поиска, но реальность такова, что много операций дискового ввода/вывода тратиться на выполнение повторяемых задач, которые можно было бы решить более оптимальным способом.
Обнаружив процесс, подозрительно много читающий или пишущий на диск, можно завершить Procmon, вернуться в окно Procexp и с помощью комбинации Ctrl+F найти этот процесс. Убедитесь, что выполняется поиск по имени, чтобы убедиться, что он имеет такой же PID. Некоторые процессы, такие как explorer.exe и svchost.exe, будут иметь несколько экземпляров. Обнаружив процесс, активно выполняющий дисковый ввод/вывод, можете обратиться к поставщику или найти обновленную версию приложения.
Для диагностики связи по сети служит TCPView, еще одна утилита из семейства Sysinternals, позволяющая определять процессы, создающие сетевые подключения (входящие или исходящие), а также получать информацию о портах. Для этих целей можно также использовать Procmon, так как помимо прочего эта утилита информирует и о сетевой активности. Наиболее важно то, что эта утилита показывает высокую сетевую активность в реальном времени. Как и в случае с дисковым вводом/выводом, переход в окно Procexp позволяет выполнить более глубокий анализ, продолжая наблюдать за сетевой активностью (вкладка TCP/IP в окне свойств процесса).
Нет связи по сети
Описанные методы предполагают наличие связи по сети с диагностируемой системой, но что делать, если связи нет? Что если надо диагностировать систему сестры, живущей за тысячи километров? В реальности это проще, чем можно было бы ожидать. Сначала попросите ее загрузить набор Sysinternals. Эти утилиты очень просты в работе, особенно для тех задач, для которых мы будем их использовать.
После загрузки попросите сестру запустить AutoRuns. Вы получите моментальный снимок всех выполняемых в системе программ в форме файла с расширением .arn.Этот тип файлов Марк Руссинович специально разработал для такой задачи — удаленного анализа автоматически загружаемых процессов.
После того, как сестра войдет в систему как локальный администратор, попросите ее создать ARN-файл, выбрав File/Save. Зачем нам нужен ARN-файл? Это наилучший способ определить, как запускаются процессы.
При локальном или удаленном подключении важно определить, что запускает то или иное приложение, и какие службы или другие автоматически запускаемые программы работают на компьютере. При запуске системы автоматически загружаются довольно много категорий программ. Наиболее интересны для нас вход в систему, службы и драйверы.
По завершении загрузки всех автозагружаемых программ выберите в меню Options/Hide Microsoft and Windows Entries. Нажмите F5 — в окне останутся только не относящиеся к Microsoft записи. Это часто отлично подходит для начала диагностики «подозрительных» служб или приложений с удаленной системы.
Далее попросите сестру запустить Procexp под учетной записью локального администратора, а затем выбрать в меню File/Save As и сохранить подробнее представление в виде дерева как текстовый файл.
Теперь попросите ее запустить Procmon на время, за которое неполадка себя должна точно проявить. В реальности для диагностики нужно не более пяти минут.
Наконец, попросите ее прислать ARN-файл и файлы дерева процессов и журнала Procmon. Последний файл скорее всего будет слишком большим для пересылки по электронной почте. Воспользуйтесь общедоступным инструментом обмена файлами, например Dropbox.
Эти файлы — практически все, что нужно для диагностики деградации производительности. Открыв журналы Procmon (которые содержат наибольше информации) и легко отфильтровав их, а также изучив дерево процессов Procexp, можно часто найти причину почти так же просто и легко, как при локальном анализе.
Диагностика проблематичных приложений в Windows — вполне подъемная задача. Имея набор утилит Sysinternals, средства отладки Debugging Tools for Windows, а также небольшой практический навык, вы сможет быстро диагностировать проблемы, прячущиеся глубоко в недрах Windows. Так вы сможете экономить время, усилия и возможно даже свое психическое здоровье..
Связанные материалы