2010-02-16 3 views
0

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

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

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

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

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

ответ

0

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

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

Существует книга Working Effectively with Legacy Code, которую я никогда не читал, но должен быть очень хорошим.

+0

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

0

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

+0

Загрузка процессора не увеличивается. –

+0

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

0

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

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

+0

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

Смежные вопросы