Як ви можете знати, що робить w3wp.exe? (або як діагностувати проблеми з ефективністю)


42

У мене виникають проблеми з продуктивністю на створеному нами сайті, і я не точно знаю, як почати його діагностувати.

Короткий опис: У нас дуже невеликий сайт ( http://hearablog.com ) з дуже малим трафіком, на шаленому спеціалізованому сервері процесор завжди дуже високий, іноді він залишається на 100% хвилин, і w3wp.exe бере більшу частину цього. Типовий сценарій w3wp.exe займає 60%, а SQL Server - близько 30%. Наш БД теж невеликий.

Довгий опис та додаткова інформація:

  • Сайт розміщений на дуже шаленому сервері від Cari.Net. З самого початку у нас було відчуття, що сервер не так поводиться правильно, як деякі речі триватимуть занадто довго, тому це може бути проблемою з конфігурацією з початку роботи. Це може бути також , що ми отримуємо віртуальний сервер , в той час як ми повинні мати спеціальну один, хоча у нас немає ніяких доказів того, що б вказати на це, за винятком того , що сервер має тенденцію бути досить повільним , за виключення.

  • Сервер 64-розрядний Windows 2008 Standard із SQL 2008 Express

  • Апаратне забезпечення - це Celeron 2,80 ГГц, 1 Гб оперативної пам’яті

  • Веб-сайт розроблений в ASP.Net MVC, використовуючи Entity Framework для доступу до даних.

  • Зараз це досить шалене обладнання, але у мене були інші сервери з цими хлопцями, з еквівалентною (або гіршою) HW, а продуктивність набагато краща, ніж ця. Однак, на інших серверах є W2003 і SQL2005, і я використовую ASP.Net "WebForms" 2.0, немає MVC, LINQ, немає EF; тож я не впевнений, чи очікується великий збір за продуктивність у 2008 році.

  • Я регулярно обслуговую MP3-файли (5-20 Мб), що трохи незвично, можливо, це спричиняє якісь проблеми?
    Чи призведе до того, що w3wp використовує багато процесора?

  • Використання диска здається дуже низьким. Пам'ять зазвичай становить близько 90%, але використання диска, схоже, вказує на те, що він не сильно перетворює сторінку.

  • Щодня я отримую тони електронних листів про тайм-аути SQL, для запитів, що займають більше 30 секунд, хоча всі наші запити досить прості (або повинні бути, але EF може їх розкрутити).

Ось як виглядає монітор ресурсів в одному з цих «спринтів» 100% процесора, на випадок, якщо там є щось корисне.

alt текст

І короткий знімок лічильників ефективності: alt текст

Тепер, що мене дуже бентежить, це те, що використання процесора w3wp просто таке високе. Це не повинно робити дуже багато ... Отже, мої запитання ...

  • Чи є якийсь спосіб з’ясувати «що» це робить? Можливо, навіть профіль це?
  • Будь-які лічильники ефективності, на які я повинен дивитись?
  • Чи варто цього очікувати, враховуючи цю апаратну / програмну конфігурацію?
  • Це може бути причиною якогось збою конфігурації, з чого ви б почали шукати?

Дуже тобі дякую.
Даніель Маґіола

Відповіді:


42

Ви також можете скористатись інтерфейсом Workers Process proceses у IIS Manager та перевірити запити, які зараз виконуються, і побачити, де вони застрягають, якщо такі є. Відкрийте диспетчер IIS-> Клацніть сервер у дереві-> Двічі клацніть значок «Робочі процеси» -> Двічі клацніть на «Робочому процесі», який вимагає ЦП, щоб побачити поточні виконуючі запити в режимі реального часу, щоб ви могли побачити, на який модуль потрібен час.

Також розгляньте можливість відстеження невдалого запиту, щоб відстежувати деякий час за запитом, щоб побачити, де вони тривають довго.


2
Це багатообіцяюче, воно насправді звучить як ТОЧНО те, що я хочу бачити, але насправді ці екрани показують порожніми. Це, мабуть, показує лише запити, які займають більше секунди, згідно з великим знаком вгорі, і жоден із наших запитів очевидно, тому що список порожній. Будь-які ідеї, як змусити його показувати більше запитів? Як опустити фільтр 1s? Дякую!
Даніель Маґіола

1
Ви можете набрати 0 у фільтр і натиснути кнопку "Перейти", що встановить його на 0 секунд. Також ви можете запустити з підвищеного командного рядка "запити списку% windir% \ system32 \ inetsrv \ appcmd.exe"
Carlos Aguilar Mares

1
Дуже дякую Карлосу! Це я закінчила, щоб знайти один запит (у нас є крон), який вбивав мій сервер кожні 5 хвилин (запускати потрібно 3,5 хвилини, тому він майже постійно знаходився на 100% процесорі). Дякую!!!
Даніель Маґіола

1
Цей інтерфейс повідомив мені, до якої URL-адреси було доступно; на жаль, це POST для веб-сервісу asmx, і ці дані недоступні. (headbang)
Росс

5

Гаразд, для початку - сервер дійсно хитрий. Але ЦЕ ПОВИНЕН бути достатньо

  • Для віртуалізації перевірте своїх драйверів. Я не знаю жодної платформи вірутуалізації, яка ховала б процесор (і я маю на увазі, що хтось ставить гіпер-v або esx на celeron), але драйвери для диска і т. Д. Є вказівкою.

  • Процесор не повинен бути таким високим. На жаль, з цією оперативною пам’яттю ви дуже сильно тостуєте - якщо ви почнете додавати профайлер, ви майже підірвете пам'ять, яку у вас є.

Я б:

  • Перевірте в журналах наявність матеріалів, які виконуються в цей момент.
  • Оновіть ОС до версії 2008 R2 - там більше інформації доступно.

Для тестування:

  • У вашому середовищі розробників зробіть копію сайту та проведіть деякі тести на ефективність.
  • Робіть там профілювання.
  • Використовуйте помилку відстеження запитів, щоб дізнатися, які запити не вдається.

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

є деякий початок там. Це може дати вам підказку у випадку, якщо проблем більше - hm - "категоризовано".

Я б також зберігав журнали ефективності на довший термін. Слідкуйте за своїм IO (секунди / читання, Seconds / write - це майже єдині відповідні). Все інше є дуже розумним IO - але як тільки ваш IO починає забирати більше часу, ніж слід, диски відстають.

Я би виключив проблему з конфігурацією на даний момент - принаймні як основний показник. Щось використовує ваші W3p ресурси, тепер вам потрібно з’ясувати, що це таке.

Взагалі, це не сервер, який би я хотів мати фізичний - він такий малий, що немає сенсу IMHO мати там машину. Віртуально було б краще;)


дуже дякую за вашу відповідь. кілька запитань. Які журнали ви б перевірили, чи не виконуються в цей момент речі? (Вибачте, якщо це питання для новачків) - Оновлення ОС: Ми можемо спробувати це, але я боюся, що це може зламати речі, можливо, наскільки це безпечно? - Середовище розробників: Проблема в тому, що в моєму середовищі розробників вона працює чудово. Процесор мізерно малий, запити не виходять з ладу тощо.
Даніель Маґола

Що стосується журналів вводу / виводу: я тільки що додав лічильники, які ви згадуєте, і всі вони знаходяться на 0, тоді як процесор високий. Я щойно додав скріншот деяких лічильників ефективності, на які я дивлюся. Я знаю, що знімок не розповідає всієї історії, але ці значення, як правило, досить стійкі. Як ви вважаєте, кількість поточних з'єднань (для яких я не маю пояснень) може бути проблемою? Будь-які ідеї, як розібратися, що ці з'єднання просять / роблять? Будь-які інші лічильники, на вашу думку, можуть бути корисними для діагностики подібного?
Даніель Маґіола

Ну, R2 цілком безпечний. Я все модернізував і жодної проблеми не виник. У будь-якому випадку .... це проблема процесора, і це може бути жахливо, особливо якщо врахувати, що ви не маєте достатньої кількості оперативної пам’яті для встановлення профілера. Я б насправді намагався повністю перевстановити. Так, смокче, але це означає, що ви можете встановити R2 свіжим і подивитися, чи проблема не зникає. Погано те, що ви не маєте резервної системи, тож не можете визначити, проблема є "локальною" чи загальнішою. Як варіант: зупиніть IIS, витріть усі тимчасові папки, які використовуєте, також
TomTom

для компіляції та подивіться, що станеться при перезапуску. За допомогою R2 ви могли бачити, чи / які файли IIS відкриті. Це локальне для однієї веб-програми, чи воно також є, якщо всі веб-сайти зупинені? Наступне, що потрібно спробувати - вимкнути всі сайти і з’ясувати, який з них порушує.
TomTom

Нарешті, проблема з віртуальними серверами полягає в тому, що, наскільки я виявив, ми в кінцевому підсумку платимо більше чи стільки ж за одне обладнання, плюс, рахунок за пропускну здатність є вбивчим (майте на увазі, ми обслуговуємо аудіофайли). Ми будемо переходити на більший сервер, якщо нам доведеться, але, чесно кажучи, з трафіком, який ми маємо, повинна бути якась проблема, ми не повинні використовувати 100% процесор ніколи ..
Даніель Маґола

4

Ви можете спробувати скористатися програмою під назвою Process Explorer для моніторингу окремих потоків, що працюють в процесі w3wp. Це повинно дозволяти вам бачити, яка нитка завдає всі збитки.


3

Мені дуже пощастило скористатися інструментом діагностики налагодження Microsoft, щоб скинути свій процес w3wp, а потім перевірити потоки та стеки для речей, що замикаються. Він навіть повідомить вам запитувану сторінку, яка породила нитку, яка є SUPER приємною .

http://www.microsoft.com/en-us/download/details.aspx?id=26798


1

Я погоджуюся з TomTom за лінією, особливо щодо покращення пробігу від Virtual у цьому пункті. Налагодження / профілювання на місцевому рівні, щоб звузити проблему - це правильно зробити.

Я збираюсь надіти свій Карнак Чудовий капелюх і накидку і попросити перший конверт. Раман повстання. Що ви отримуєте, якщо розміщуєте ОС, ASP.NET і жадібний SQL Server Express в 1 Гб.

Я вважаю, що ваша проблема полягає в тому, що SQL Server Express залучає всю наявну оперативну пам’ять для буферного пулу і повільно відпускає її. Додаткову інформацію див. У розділі http://support.microsoft.com/kb/321363 . Крім того, IIS має кеш-пам'ять за замовчуванням у 256 Мб, яку, можливо, вам доведеться змінити ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Налагодження діагностики - це чудовий інструмент для усунення несправностей (добре, ймовірно, кувалда).

http://technet.microsoft.com/en-us/library/bb742546.aspx - це досить пристойна стаття, яку потрібно переглянути. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e вказує на те, що переробка пулу додатків зійшла з розуму як ще одна можлива проблема.


1

Використовуйте лічильник "Process" Perfmon, щоб побачити окремі атрибути процесу w3wp.exe. Скільки часу процесора для робочого процесу становить час ядра? Високі часи ядра можуть свідчити про тимчасове пейджинг, але ви кажете, що ви не впевнені. Інші можливості - це драйвери. Робочий процес має 23 нитки активних, що добре, але що вони роблять? Спробуйте SysInternals 'ProcessExplorer, щоб копати трохи більше; Ви також можете побачити, що TCP / IP-з'єднання відтворюються. Я не використовував SQL Express, але чи є у нього параметри настройки пам'яті, як його старший брат. Чи викликає SQL голодування IIS пам'яті, викликає надмірне пейджінг?


Подивимось, чи правильно я це роблю ... Я додав% процесорного часу та% користувальницьких лічильників часу, як для w3wp процесу, і вони обидва цілком відповідають один одному. Це означає, що немає часу на ядро, чи я дивлюся на це неправильно? (вибачте, я новачок у цьому)
Даніель Маґола

0

Це може бути не повністю пов’язано, але переконайтеся, що ви використовуєте NOLOCK у своїх запитах. Це може допомогти у випадку таймаутів SQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.