процесс отладки зависает в устаревшем стороннем приложении - PullRequest
0 голосов
/ 16 февраля 2010

У нас есть устаревшая сторонняя телефонная система, построенная на так называемой «CT ADE», которая периодически зависает на несколько секунд (от 5 до 30), а затем возобновляет работу. Во время этих зависаний пользователи испытывают неприятные паузы в меню телефона. Это продолжается, по крайней мере, несколько недель.

Этот код был написан не мной, поэтому мои знания о нем очень ограничены. Внутри есть несколько «задач» (потоков?), По одной на телефонную линию, которые обрабатывают звонки. Когда приложение зависает, все "задачи" зависают.

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

Процесс не показывает никаких всплесков памяти или процессоров при возникновении проблемы.

На данный момент я просто пытаюсь что-нибудь попробовать ...

Ответы [ 3 ]

0 голосов
/ 16 февраля 2010

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

0 голосов
/ 16 февраля 2010

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

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

0 голосов
/ 16 февраля 2010

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

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

Есть книга Эффективная работа с устаревшим кодом , которую я никогда не читал, но она должна быть очень хорошей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...