Процесс внезапно падает без ошибок - PullRequest
4 голосов
/ 17 апреля 2011

У меня есть довольно большой серверный процесс, написанный на .net-3.5, то есть работающий на VMWare vCenter Server, который продолжает аварийно завершать работу без сообщений об ошибках. Процесс создается службой Windows в 32-разрядной Windows Server 2003 и предназначен для длительного процесса (несколько дней). Это процесс совместной работы, который принимает соединения через Tcp-сокеты от нескольких клиентов, работающих на других компьютерах с Windows XP, и позволяет им обмениваться данными. Кроме того, процесс также самостоятельно размещает около 8 служб WCF, которые предоставляют смешанные конечные точки Tcp и Http. Процесс обычно потребляет около 500 МБ памяти и между 30-50% процессорного времени. Существует также экземпляр SQL Server 2005 на той же виртуальной машине, на которой размещено 6 баз данных, и которая занимает около 1-1,2 ГБ памяти. На всю систему было выделено 8 Гб оперативной памяти, и она потребляет до 7 Гб при нормальной работе. Я предполагаю, что PAE включен, чтобы разрешить системе адресовать 8 Гб оперативной памяти, но не подтвердил это.

Проблема заключается в том, что в, казалось бы, случайные моменты времени процесс внезапно завершается сбоем без сообщений об ошибках, в том числе в журнале событий. Я пытался подключить отладчики к процессу, и они также не обнаружили сбой. Сначала я попробовал WinDbg в сборке релиза с загруженными символами, затем заменил все dll / exe релиза на отладочные сборки и загрузил их символы. Сбои все еще происходили, и отладчик их не ловил. Затем я установил Visual Studio в системе с надстройкой .Net Reflector и прикрепил ее. Это также не поймало крушение.

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

Ответы [ 3 ]

1 голос
/ 18 апреля 2011
0 голосов
/ 25 апреля 2011

Оказывается, один из сервисных плагинов искал и ссылался на библиотеку Java. Когда пользователь вышел из системы, плагин завершил работу службы из-за прекращения работы JVM. Мы смогли заставить все работать снова, следуя советам в этом посте (запустив JVM с параметром '-Xrs'): http://www.velocityreviews.com/forums/t128371-java-app-dies-on-logoff.html

0 голосов
/ 17 апреля 2011

«Сбой» без вывода предполагает вызов _exit() (или даже exit()).Я видел, как некоторые уголки библиотеки времени выполнения Visual Studio делают это, хотя обычно они выводят загадочное сообщение на stderr.stderr захвачено?

Подозрение на нехватку памяти также кажется вероятным.Если .net имеет heapspace() -подобную функцию для описания того, сколько памяти используется кучей, регистрируйте это периодически, возможно, вместе с общим объемом используемой памяти (код + стек + данные).Я не знаком с .net, но должны быть функции для получения этих значений.

...