Комп'ютери з неефективними програмним забезпеченням - це чистий збиток, обумовлений зниженням продуктивності користувачів, підвищенням споживання електроенергії, скороченням терміну служби акумулятора, тепловим зносом, відмовами диска і багатьом іншим. Проігнорувати проблематичне ЗА не вдасться — воно часто веде до набагато більших проблем у сенсі грошових і тимчасових витрат.
Працюючи над Windows XP, фахівці Microsoft витратили багато часу на те, щоб інтерфейсом області сповіщень на панелі завдань Windows можна було керувати. На жаль, багато розробники програм неправильно використовували цю можливість: дуже часто після входу в систему нового комп'ютера доводилося бачити в області сповіщень більше 10 значків.
У всього є своя вартість, і у кожного значка, який відображається в області сповіщень, є ціна, причому мова йде не тільки про місце на робочому столі. За кожним стоїть працює додаток. А в кожній новій версії Windows додавалося ще більше служб, ніж у попередній. Коротше кажучи, на комп'ютері працює багато програм, чи то самостійно встановлена ОС, придбаний у незалежного постачальника разом з комп'ютером або встановлена за допомогою стандартного корпоративного образу системи.
Швидше, ще швидше
«Чому не завантажується Windows?» - перший по популярності питання, що задається користувачами, а другий: «Чому мій комп'ютер так повільно працює і що зробити, щоб виправити ситуацію?»
Якщо є два комп'ютери, на яких застосовано один образ (особливо, коли на одній з машин спостерігаються проблеми), завжди цікаво розпочати з порівняння цих двох систем, щоб з'ясувати відмінності між ними. Використання обговорюваних нижче інструментальних засобів часто сильно спрощує виявлення причини неполадок.
Говорячи про ресурси комп'ютера, варто зауважити, що є чотири їх виду, які можуть впливати на виконання роботи:
Нам буде потрібно набір програм 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.
Є два варіанти вирішення проблеми:
Таким же манером легко виявити процес, активно споживає пам'ять. Якщо не вдається розпізнати процес по імені (що цілком можливо, коли мова йде про шкідливий ПО), досить вибрати процес і клацнути 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. Так ви зможете економити час, зусилля і можливо навіть своє психічне здоров'я.