Задать вопрос

Как понять какой код сейчас выполняют потоки?

Приложение winforms , есть довольно большой код который выполняется в новых потоках .
В коде много функций , там и работа с сетью и использование сторонних библиотек , вообщем кода много и за всем не уследить .
Софт работает нормально 1-2 дня , ест под 80% цп но стабильно . Однако через это время начинает работать со скоростью улитки (будто большая часть потоков умерла) .
Пробовал во время таково вод застоя смотреть thread.IsAlive но вроде как все потоки живы .
Можно ли как-то узнать какой именно код в данный момент выполняют потоки ? Чтоб найти место где они стопорятся .
  • Вопрос задан
  • 431 просмотр
Подписаться 4 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 3
Отладчик в студии и в райдере позволяют поставить на паузу всё приложение даже без точек останова.
Когда приложение на паузе - ты можешь посмотреть список всех живых управляемых потоков и посмотреть, на каком участке кода они находятся.

Но если не получится это применить (например на целевой машине не стоит студия/райдер) или это просто слишком неуловимая ошибка, то Тогда остаётся только обмазаться телеметрией (логами, метриками) и смотреть, что происходит.
Ответ написан
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
А расход памяти смотрели? Похоже на утечки памяти и уход системы в глубокий свап. Что показывает менеджер задач? Нормальный - типа ProcessExplorer, а не встроенный. Еще могут быть зависшие потоки, которые чего-то там ждут - например, потерянного ответа на сетевой запрос. Надеюсь, все сетевые запросы идут с таймаутом? А еще могут быть какие-то косяки в используемых либах. Как тут уже сказали - добавляйте логирование как минимум в ключевых местах, а как максимум - везде и всюду и потом уже разбирайте логи и ищите где именно проблема.
Ответ написан
@vitaly_il1
DevOps Consulting
Из относительно простых способов - APM (NewRelic APM или другой).
ИМХО, в большинстве случаев позволяет понять в чем проблема не залезая слишком глубоко.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы