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

StackOverflow https://stackoverflow.com/questions/637617

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Некоторые мысли для рассмотрения:

<Ол>
  • Вы знаете, что компьютер не отвечает, но это не значит, что он завис. Отвечает ли он на пинг?
  • Может быть, индикатор активности диска постоянно включен?
  • Вы говорите: "Нет клавиатуры" - Вы имеете в виду отсутствие заглушек или подсветки?
  • Хотя приложение .NET может быть единственным, которое вы используете в данный момент, это не означает, что оно является причиной проблемы. Это может сделать какая-то фоновая работа.
  • Например, я заметил, что резервное копирование Retrospect при создании моментального снимка останавливает всю систему на 10-15 минут. Я имею в виду, что нет блокировки прописными буквами, часы на панели задач не обновляются, нет CTRL-ALT-DEL, невозможно набрать текст " Ответить " текстовое поле в SO, ничего. Это не имело никакого отношения к тому, что я делал в то время, когда отвечал на вопрос о SO.

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

    Другие советы

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

    Вы также можете регулярно создавать дампы памяти вашего приложения. Возможно, вам придется сделать небольшой сценарий для этого, хотя. (обычно вы создаете дамп с помощью нажатия клавиши, используя такой инструмент, как userdump или adplus, но если ОС не реагирует на нажатия клавиш, это не сработает.) Таким образом, вы знаете, в каком состоянии находится ваш процесс во время или незадолго до зависания. Эта страница: http://blogs.msdn.com/debuggingtoolbox/default.aspx является хорошей отправной точкой для написания сценариев WinDbg. (Если вы не знаете, что делать с дампом памяти, я бы снова предложил отличную книгу Джона Роббина об отладке!)

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top