Мониторинг (сетевой) ресурс ресурсов и производительности приложения Windows - PullRequest
5 голосов
/ 15 апреля 2009

Я строю клиент-серверное решение; клиент является настольным приложением, а сервер - веб-приложением.

По сути, мне нужно отслеживать производительность и использование ресурсов клиента, который является приложением Windows Desktop на основе .NET 2.0.

Самая важная вещь, которую мне нужно отслеживать, - это сетевые ресурсы, которые клиент использует , то есть каков размер данных, которые поступают с клиента на сервер, и каков размер данных что клиент скачивает с сервера.

Кроме этого, общий мониторинг производительности также может помочь.

Пожалуйста, руководство.

Редактировать: Несколько человек предложили использовать perfmon, но разве значения, показанные в perfmon для всей системы? Мне нужна эта сетевая статистика только для одного приложения ... байты отправляются и принимаются одним настольным приложением.

Ответы [ 10 ]

3 голосов
/ 25 мая 2009

Стандартным инструментом для мониторинга сети является Wireshark . Это позволяет очень гибко фильтровать сетевой трафик. Это может быть довольно излишним для вашего приложения. Если вы используете чистый .NET, я бы посоветовал вам добавить регистрацию производительности в свои сетевые классы на стороне сервера - если вы используете классы библиотеки .Net, то наследуйте от них свои собственные классы, которые добавляют статистику при отправке и получении данных.

2 голосов
/ 28 мая 2009

Вам нужно разделить мониторинг на две части:

  • Как система взаимодействует с сервером (количество выполненных вызовов)
  • Объем сетевого трафика (размер передаваемых данных для любого вызова)

Первая часть (по моему опыту) часто игнорируется, хотя она имеет большое значение, потому что приобретение нового соединения часто намного дороже, чем трафик данных сам по себе.

Вы ничего не говорите нам о короле соединения, которое вы используете (низкоуровневые вызовы tcpip, веб-сервисы, WCF или что-то еще), но я предлагаю:

  • Найдите способ определить, сколько раз ваше приложение вызывает сервер
  • Узнайте, сколько стоит один отдельный звонок в плане обмена данными

Как контролировать эти значения, во многом зависит от используемой технологии, для некоторых это очень просто (например, если вы используете веб-сервис, настройте Fiddler для мониторинга вызовов и проверки результаты мониторинга очень просты), для других вам нужно работать с анализатором трафика низкого уровня, таким как Wireshark или MS Network Monitor и научиться фильтровать трафик в соответствии с IP-адресом сервер, используемые порты и другие параметры.

Если вы поясните архитектуру своего приложения, я могу попытаться быть более конкретным.

С уважением Massimo

2 голосов
/ 28 мая 2009

Я попробовал perfmon и не смог посмотреть наш сетевой трафик. Но я смог это сделать в Performance Explorer в наборе команд Visual Studio 2005.

Если у вас есть Team Edition Visual Studio, вы можете настроить выборку или инструментарий в своем настольном приложении. Затем перейдите к настройкам сеанса. выберите События -> Трассировка ядра Windows -> Сеть. Запустите ваше приложение и позвольте Visual Studio регистрировать данные. Затем сохраните отчет. (Я люблю Microsoft за эту «функцию»), перейдите в командную строку, перейдите в C: \ Program Files \ Microsoft Visual Studio 8 \ Team Tools \ Performance Tools и запустите «vsperfreport / CALLTRACE (filename) .vsp». CSV-файл, содержащий все сетевые пакеты, отправленные / полученные / размер / порт и т. д. настольным приложением.

Я знаю, что это было многоплановое решение, но я только что попробовал его в своем приложении .Net 2.0, и оно охватило все наши взаимодействия с Oracle Identity Manager и Oracle Database.

2 голосов
/ 23 мая 2009

Взгляните на эту статью: http://www.codeproject.com/KB/IP/apptraffwatcher.aspx

Возможно, вы сможете разорвать исходный код и получить то, что вам нужно, чтобы измерить загрузку / выгрузку для идентификатора процесса вашего приложения.

Похоже, он использует эту библиотеку для получения информации о количестве трафика: http://www.codeproject.com/KB/IP/trafficwatcher.aspx

2 голосов
/ 15 апреля 2009

Вы также можете использовать диспетчер задач, чтобы сделать это. Перейдите на вкладку процессов, затем View -> «Выбрать столбцы». Проверьте «байты чтения ввода-вывода» и «байты записи ввода-вывода». Затем найдите вашу программу в списке процессов, и вы сможете наблюдать совокупные значения.

1 голос
/ 29 мая 2009

Я удивлен, что никто не предложил SysInternals (теперь Microsoft) Process Explorer (technet.microsoft.com/en-us/sysinternals/bb896653.aspx). Если вы щелкните правой кнопкой мыши по исполняемому файлу и щелкните левой кнопкой мыши по свойствам, появится диалоговое окно. Затем вы переключаетесь на вкладку «Производительность» и можете отслеживать ввод-вывод исполняемого файла. На вкладке График производительности будет отображаться загрузка процессора и история байтов ввода-вывода с течением времени. Это крутой и бесплатный инструмент.

1 голос
/ 28 мая 2009

По вашему сообщению неясно, используете ли вы HTTP-запросы. Вы указали, что сервер является веб-приложением, что подразумевает (возможно, неправильно), что вы можете использовать протокол HTTP для отправки / получения данных с сервера на клиент.

Если это так, одним из инструментов, который может быть полезен, является Fiddler . Этот инструмент будет контролировать весь HTTP-трафик внутри и снаружи вашей рабочей станции и может (я считаю) наблюдать за конкретными сессиями и приложениями. Приятной особенностью является то, что вы можете видеть отдельные запросы и просматривать статистику по этим запросам, включая входящие / исходящие байты, время прохождения туда-обратно и другую полезную информацию.

Если вы не используете HTTP, тогда этот инструмент не поможет.

0 голосов
/ 12 июня 2009

Вы должны проверить ACE Analyst для этого варианта использования - подумайте о нем как о суперинтеллектуальном слое поверх захвата пакетов Wireshark. Вам нужно посмотреть на пакеты, чтобы понять истинную природу поведения приложения при работе в сети.

0 голосов
/ 15 апреля 2009

Если вы хотите, чтобы это было встроено в вашу клиентскую кодовую базу и не использовалось внешнее средство, вы можете использовать Счетчики производительности , чтобы получить доступ к этому и большинству других сообщений, сообщаемых монитором производительности, диспетчером задач и т. Д. .

0 голосов
/ 15 апреля 2009

Вы хотите посмотреть на perfmon (иначе называемый Performance Monitor в инструментах администрирования в меню «Пуск»).

Откройте его в графическом представлении по умолчанию, добавьте счетчик, выберите сетевой интерфейс, затем байт в секунду (или аналогичный счетчик), нажмите кнопку ОК, и все готово.

Вы можете поэкспериментировать с другими сетевыми счетчиками, так как их много, один из них будет делать именно то, что вы хотите. Вы также можете сохранить журналы perfmon в файл и просмотреть их впоследствии - вы увидите график целиком и сможете «увеличить» разделы. В качестве альтернативы, вы можете сохранять файлы в стиле журнала только с необработанными числами.

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

В Vista вы больше не можете добавлять отдельные счетчики, вы добавляете полный набор счетчиков, сгруппированных под объектом, - поэтому для моего примера вы добавили бы объект сетевого интерфейса, а затем увидели бы все отдельные счетчики. на графике после нажатия ОК.

...