Что может заставить приложение .NET заморозить компьютер?

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

У меня есть клиент / сервер приложение говорить по Ethernet. В одном компьютере я запускаю сервер и клиента, а на другом просто клиент. Один работает Vista и один работает XP. После простоя около 3 недель весь компьютер замерзает и ничего не работает, не мышь, не клавиатура, ничего -просто выключить. Каждые десять секунд сервер отправляет пинг-сообщение, чтобы увидеть, живы ли клиенты, кроме того, что всего несколько небольших сообщений отправляются туда-сюда каждый день.

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

Ответ на: "Что может заставить приложение .NET заморозить компьютер?"

Количество ответов:4

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

Вы можете прикрепить отладеб ядра к ОС. Таким образом, вы должны быть в состоянии проверить состояние ОС и ваш процесс, даже если ОС полностью не отвечает. (К сожалению, это намного сложнее, чем просто удар "брейк" в VS. Я предлагаю прочитать Джон Роббин в "Отладка приложений для .NET и Windows", прежде чем пытаться это.)

Вы также можете попытаться создать свалки памяти вашего приложения в регулярные промежутки времени. Вы, возможно, придется сделать немного сценариев для этого, однако. (обычно вы создаете свалку с нажатием клавиши, используя инструмент, как userdump или adplus, но если ОС не реагирует на нажатия клавиш, что не будет работать.) Таким образом, вы знаете, в каком состоянии находится ваш процесс во время или незадолго до зависания.Эта страница: http://blogs.msdn.com/debuggingtoolbox/default.aspx is a good starting point for scripting WinDbg. (If you don't know what to do with a memory dump, I'd again suggest John Robbin's excellent book on debugging!) является хорошей отправной точкой для сценариев WinDbg. (Если вы не знаете, что делать с свалкой памяти, я бы еще раз предложить Джон Роббин отличную книгу о отладке!)

Кроме того, я могу только думать о стандартных трюков отладки: возникает ли проблема на каждом компьютере? Происходит ли это, если нет запросов клиентов? Это произойдет раньше, если есть больше запросов клиентов? Это произойдет раньше, если есть менее доступной физической памяти? Попробуйте удалить части приложения (возможно, на отдельном сервере для тестирования) и посмотреть, если проблема все еще происходит, и так далее. Попробуйте запустить его в VM, чтобы вы могли видеть, если он использует процессор, harddisk, или сети во время этих "зависает".

Некоторые мысли, чтобы рассмотреть:

  1. Вы знаете, компьютер не отвечает, но это не значит, что он висел. Реагирует ли он на пинг?
  2. Может быть, свет активности диска на все время?
  3. Вы говорите "нет клавиатуры" - вы имеете в виду не крышки блокировки или num блокировки огней?
  4. Хотя приложение .NET может быть единственным, который вы работаете в то время, это не означает, что это является причиной проблемы. Некоторые фоновые работы могут делать это.

Например, я замечаю, что резервное копирование ретроспективы, когда он создает снимок, замораживает всю систему на 10-15 минут. Я имею в виду, не колпачки блокировки, часы в панели задач не обновляется, не CTRL-ALT-DEL, не может ввести в "Ответ" текстовое поле в SO, ничего. Это не имеет ничего общего с тем, что я делал в то время, который был ответ на вопрос о SO.

После того, как он вернулся, так спросил, если я был человеком. Мои чувства были завелены. ;-)

Какой компьютер замораживает, сервер или клиент? И какие OSes они работают соответственно?

Как Отметил Даниэль Л. Если вы можете, изменить свой код для использования обработчиков событий, это гораздо более надежное решение.

Наконец, вы уверены, что нет аппаратных проблем на замораживании компьютера?