Назад | Перейти на главную страницу

Perfmon: какой счетчик определяет, что потоки ждут?

Во время нагрузочного тестирования приложения ASP.NET мы обнаружили, что страницы занимают 20–30 секунд при большой нагрузке.

Мы подозреваем, что это связано с тем, что страницы ждут вызовов базы данных или веб-служб.

Есть ли специальный счетчик perfmon, который может идентифицировать такого рода узкие места на веб-серверах? ЦП, память и диск в норме.

Или мы должны использовать другой инструмент, кроме perfmon, чтобы отследить это узкое место?

Если вы подозреваете, что определенное приложение или служба вызывает утечку памяти, исследуйте использование памяти вашими приложениями, используя следующие счетчики:

Memory\Available Bytes reports available bytes; its value tends to fall during a memory leak.
Memory\Committed Bytes reports the private bytes committed to processes; its value tends to rise during a memory leak.
Process\Private Bytes reports bytes allocated exclusively for a specific process; its value tends to rise for a leaking process.
Process\Working Set reports the shared and private bytes allocated to a process; its value tends to rise for a leaking process.
Process\Page Faults/sec reports the total number of faults (hard and soft faults) caused by a process; its value tends to rise for a leaking process.
Process\Page File Bytes reports the size of the paging file; its value tends to rise during a memory leak.
Process\Handle Count reports the number of handles that an application opened for objects it creates. Handles are used by programs to identify resources they must access. The value of this counter tends to rise during a memory leak; however, you cannot rule out a leak simply because this counter's value is stable.

Утечки памяти и невыгружаемый пул

Хотя любая утечка является серьезной, утечки памяти вызывают особую озабоченность, когда они связаны с невыгружаемым пулом. Многие системные службы выделяют память из невыгружаемого пула, потому что им нужно ссылаться на нее при обработке прерывания и не могут в это время принять отказ страницы. Чтобы определить, влияет ли утечка на невыгружаемый пул, включите в мониторинг следующие счетчики:

Memory\Pool Nonpaged Bytes
Memory\Pool Nonpaged Allocs
Process\Pool Nonpaged Bytes

Как определить: приложение с утечками постоянно запрашивает больше памяти. Он характеризуется увеличением байтов процесса / файла подкачки с той же скоростью, что и выделенные байты системы; то есть все выделение памяти происходит из-за одного процесса. Доступные байты неуклонно уменьшаются, пока система не выгружает что-то, а затем виртуальные байты увеличиваются, чтобы освободить место для дополнительных доступных байтов. Рабочий набор "дырявого" приложения фактически уменьшается, когда часть его выгружается. Обратите внимание, как количество ошибок страницы в секунду увеличивается по мере уменьшения количества доступных байтов.

В комплект Windows Resource Kit входит пример программы под названием LeakyApp.exe. Эта программа имеет типичную ошибку в том, что постоянно выделяет все больше и больше памяти.