Как узнать, почему мое приложение перестает отвечать на сайты недоступных клиентов - PullRequest
0 голосов
/ 10 сентября 2010

Мое приложение развернуто на сайтах клиентов, к которым я не могу получить доступ, и у него нет подключения к Интернету.

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

Мы не смогли наблюдать это на нашем сайте.

Могу ли я что-нибудь сделать, чтобы помочь мне найти проблему?

Это VC2008 Win32 MFC приложений.

Приложение довольно сложное и включает в себя множество потоков, механизмов синхронизации, доступа к базе данных, ЧМИ, каналов связи ...

Примечание: клиент может отправить нам файлы журнала.

Примечание : приложение не аварийно завершает работу.Это просто висит.Поскольку я не знаю, какова природа проблемы, я не могу программно узнать, что что-то пошло не так (или я?)

Ответы [ 5 ]

3 голосов
/ 10 сентября 2010

Я имел большой успех с ADplus и WinDBG в прошлом. Вы можете проверить это. Especially check out the Hang mode in ADplus.

2 голосов
/ 10 сентября 2010

Я хотел бы начать с некоторых вопросов - не перегружен ли процессор в это время без ответа? Есть ли конкретный процесс, который это затягивает? (Вы можете использовать PerfMon, чтобы получить ответы). В зависимости от ответов, я бы, вероятно, продолжил, сделав дамп процесса на этом этапе (ProcDump от sysinternals отлично подходит для этих целей) и исследуя его в автономном режиме.

1 голос
/ 10 сентября 2010

Мой опыт поиска ошибок в установках на другой стороне планеты показывает три полезных метода: ведение журнала, ведение журнала и ведение журнала.

Что эти файлы журнала говорят, что ваши клиенты отправили вам?Если они недостаточно подробны, отправьте им версию, которая регистрирует больше.Используйте бинарное приближение, чтобы выявить ошибку.

1 голос
/ 10 сентября 2010

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

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

Так как я не программист Windows, я не знаю много о доступности таких инструментов в Windows, однако я думаю, что вам нужно что-то похожее на это http://www.codeproject.com/KB/threads/StackWalker.aspx

1 голос
/ 10 сентября 2010

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

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

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