Что Вы делаете, если Вы не можете разрешить ошибку? [закрытый]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
33
задан 4 revs, 2 users 98% 17 April 2015 в 10:20
поделиться

32 ответа

Некоторые вещи, которые помогают:

1) Делают перерыв, приближаются к ошибке от другого угла.

2) Становятся более агрессивными с трассировкой и входом.

3) Имеют другую пару глаз, смотрят на него.

4) обычное последнее средство должно выяснить способ сделать ошибку не важной путем изменения фундаментальных условий, в которых это происходит

5) вещи повреждения и Удар. (Снятие напряжения только!)

40
ответ дан 27 November 2019 в 17:28
поделиться

Иногда требуется немного латерального мышления, но каждая ошибка является закрепляемой. Иногда необходимо оставить его и сон по нему, иногда хорошо попросить, чтобы у кого-то еще был беглый взгляд (они могут видеть что-то, что Вы не имеете), но главным образом это о попытке разных вещей, кричащих на предыдущем опыте. Это может быть печально, но шум, который Вы получаете при фиксации его не похож ни на кого другого!

0
ответ дан 27 November 2019 в 17:28
поделиться

Если это не будет очень важно, не фиксируйте его, то Вы просто проведете слишком много времени!

Сохраняют ошибку открытой. комментарий/работа о нем, когда Вы можете. Это могло бы добраться, фиксируют случайно (или кем-то еще) позже!

0
ответ дан 27 November 2019 в 17:28
поделиться

У меня есть ошибка, которая разоблачает каждые несколько месяцев на сайте для клиентов. Это обычно происходит в 3:00, и не обнаружено до начала следующего утра, когда клиент прибывает в их сайт. И обычно когда они обнаруживают его, они хотят, чтобы все сразу получило работу, таким образом, наши люди поддержки обычно просто перезагружают компьютер. Это сводило меня с ума в течение многих лет. Этого никогда не происходит на моей тестовой машине или в лаборатории QA, только на определенных сайтах для клиентов. Со временем я имею

  • , осуществил рефакторинг часть кода, что я думал, вызывал его
  • добавленный больше распечаток отладки вокруг, где это, кажется, отказывает
  • , перенаправил stdout так, чтобы в следующий раз я видел его, я могу" kill -3" процесс
  • оказавший поддержку некоторые новые инструменты для разгрузки текущего состояния блокировок базы данных и т.п..
  • добавленная диагностика для создания этого более очевидным, когда это действительно происходит

, Этого не произошло за несколько месяцев, и мне пересекли мои пальцы, что я, возможно, зафиксировал его на этот раз, но я не рассчитываю на него.

0
ответ дан 27 November 2019 в 17:28
поделиться

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

я иногда пытаюсь переопределить то, что другие называют ошибкой, как действительно являющейся функцией, но это редко работает!

0
ответ дан 27 November 2019 в 17:28
поделиться

Уходить некоторое время и затем возвращаясь к проблеме является одним общим подходом, который я делаю и услышал.

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

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

Вы не учли, "происходит под другим O/S" категория ошибок так, чтобы веб-страница, которая прекрасна в IE и Firefox на ПК, могла быть похожей на дерьмо на Safari на Mac. Я пачкаю руки в попытке устранить проблему CSS с помощью моей машины в качестве сервера и Mac, который является по строке или два в кабинах пола для наблюдения этой проблемы, или действительно ли это - настолько низкий приоритет, это развертывается под ковриком? С другой стороны, если ошибка была на Linux и нет никаких машин Linux около меня, что я должен сделать?

я сожалею, что уехал с некоторыми вопросами, но они, кажется, трудные вопросы для меня время от времени.

0
ответ дан 27 November 2019 в 17:28
поделиться

используйте более творческие методы разыскивания ошибки.

использующая удаленная отладка на машине, где его восстанавливаемое.

использование профильные инструменты.

представляют больше входа приложению.

0
ответ дан 27 November 2019 в 17:28
поделиться

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

0
ответ дан 27 November 2019 в 17:28
поделиться

Это - то, что я сделал сегодня...

я часто отлаживаю взаимодействие HW/SW и, случай, регистрирующий (инструментарий), изменяет или скрывает ошибку. Следовательно тесты выполняются "в скорости". Я называю эти ошибки "плотвой", когда они убегают из любого света, я могу блистать на них.

, Таким образом, я имею к:

Находят транзакцию, которая вызывает ошибку. Перечислите взаимодействие HW через вход (этот тест передачи, но это иллюстрирует поток).

Инструмент прежде и после ошибки для печати изменений состояния.

ошибка, которую я решаю теперь, конечно, является худшим случаем, поскольку HW запирается. HW включает ЦП так как то, чтобы быть в хорошо освещенной комнате затем сбои питания и его черный как смоль.

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

я очень очень тщательно записал все шаги, до которых я сделал, характеризуют эту ошибку (что работы, что сбои и т.д.). Отправленный это разработчикам с подобным HW для проверки его просто не был я или мой HW.

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

Никакие ответы, эта ошибка является моей для решения...

Это взаимодействие SW HW является циклом tha, делает некоторую установку, затем вводит цикл опроса, который читает, когда транзакция закончена. Должны произойти много транзакций. Какая транзакция перестала работать? Действительно ли это - первое (указание, что я могу отладить транзакцию и не некоторый шум в HW). Действительно ли это всегда Энная транзакция? Что делает Энное различное, чем первое или (N-1) th. SW является единственным, распараллелил и создал, чтобы быть предсказуемым. Никакое вытеснение, никакие прерывания не включены.

Этот SW работал прежде, что нового? Весь HW является новым. В этом случае весь кремний является новым как ASIC. Даже встроенный ЦП является новым и специализированным, таким образом, ISA является новым.

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

я включил просто журнал, который сообщает, сколько раз SW опрашивает HW относительно завершения. Таким образом первая транзакция работает на скорости, я понимаю, как часто я касаюсь HW в трудном цикле опроса. Тестовые передачи. Я знаю, что это - Энная транзакция, и я записал пиковое количество опросов для всех транзакций (возможно, бессмысленные данные).

После modifing что-либо, я должен поместить его назад способ, которым это должно было проверить, что ошибка все еще существует. После того, как вся земля вращалась, и солнечные ветры не так сильны ;)

Посмотревший весь checkins, видел, что подрядчик изменил некоторые важные параметры установки без объяснения. Эти (привлеченные со стороны) люди все еще являются объектом оценки. Это не поможет.

Найденный в цикле опроса не было никакого spinwait. Плохо для тайм-аута цикла как без него тайм-аут зависит от скорости ЦП. Добавленный spinwait, все еще никакое счастье.

Ограниченный количество транзакций для наблюдения, где это перестало работать, где-нибудь прежде 1000.

Установка HW для выполнения медленнее, все еще зависает.

Ненависть для отъезда любого читающего это зависание также, но эту резкую критику должна будет ожидать до завтра.

1
ответ дан 27 November 2019 в 17:28
поделиться

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

1
ответ дан 27 November 2019 в 17:28
поделиться

Я обычно, очень старайтесь решение его. Но, если это не возможно для разумных окон времени, я оставляю его в течение некоторого времени braincells для решения его, в то время как я сплю ;) Когда-то это работает...

1
ответ дан 27 November 2019 в 17:28
поделиться

Прежде всего действительно ли это восстанавливаемо? Это - ОГРОМНОЕ плюс то, если это. Я хочу, чтобы вещи ошибки всегда/никогда произошли... это - неустойчивые, которые являются неприятными.

И это собирается зависеть от проблемы, но в моем магазине мы обычно будем команда тега такая проблема, полагающая, что 2 головы (или 3 или 4) лучше, чем 1.

Иногда ошибка даже не будет в МОЕМ коде, но это обычно. Были проблемы, где сторонняя библиотека была преступником, или конкретная реализация на конкретной платформе была причиной - они воняют.

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

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

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

Это - то, что я делаю.

1
ответ дан 27 November 2019 в 17:28
поделиться

Я становлюсь немного деморализованным также, когда неспособный для решения ошибки. Обычно, когда я врезался в стену с ошибкой, я просто обращу внимание на своих результатах и прекращу работать над ним. Я вскочил бы на другую ошибку, которую легче решить и затем возвратилась к ошибке. Путем выполнения этого у меня были бы новый ум и отношение в занятии ошибкой. Иногда у Вас могла бы быть тенденция сверхусложнить вещи при проведении слишком много времен на ошибке. При наличии повреждения, помогает в повреждении стены.

RWendi

1
ответ дан 27 November 2019 в 17:28
поделиться

Я добавляю, как можно больше отладки (запишите в файл журнала, окна сообщения, и т.д.), и тест.

я не думаю, что это - худшая ошибка, которую можно найти. Худшие - те, которых Вы не можете воспроизвести детерминировано или в тестовой среде.

1
ответ дан 27 November 2019 в 17:28
поделиться

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

0
ответ дан 27 November 2019 в 17:28
поделиться

Я честно не могу вспомнить ошибку, которую я не мог исправить. Это может вызвать большой рефакторинг или может требовать времени, но у меня никогда не было того, от которого я не могу избавиться. Если мне требуется больше чем час для разыскивания его затем, это - почти всегда что-то действительно глупый и маленький как то, чтобы выглядеть правильного прошлое, что :, который должен был быть ;, и т.д.

В Python, если я использую редактора, который не является моим, или возможно это - чужой код, я использую retab! в энергии или вставке во что-то как pastie для проверки добавления отступа (если я не имею энергию в наличии).

, Если это не незваный гость/недопустимое, затем я иду дальше и возвращаюсь с новой парой глаз.

, О, и Вы можете никогда , когда-либо имеют слишком много входа.

1
ответ дан 27 November 2019 в 17:28
поделиться

Я даю ему больше времени. У меня когда-то была ошибка (в персональном проекте), что я просто не мог выяснить. Я попробовал каждый метод отладки, о котором я мог думать, включая Google, без успеха. Шесть месяцев спустя я возвратился и нашел ошибку в течение часа или около этого. Это не было что-то простое (что-то по-видимому недокументированное продолжалось глубоко в Swing), но я просто посмотрел на него способом, я не имел прежде.

2
ответ дан 27 November 2019 в 17:28
поделиться

У меня были ошибки, которые заняли недели или за месяцы до того, как решение было найдено, но в конечном счете все ошибки действительно становятся фиксированными. Кроме классических методов отслеживания ошибок неотладчика как отключение частей системы, пока Вы не получаете минимальный тестовый сценарий, я использовал эти методы:

  • Ищущий лучшие средства отладки. Новая перспектива имеет большое значение. Xdebug - что-то, что я начал использовать в PHP только из-за ошибки производительности, на которой я не делал прогресс.

  • Изучение технология, в которой расположена ошибка. Это помогло отладить дополнение перспективы. Это имело случайные ошибки, которые не имели никакого смысла и того Google, о котором поиски подняли ничего. Путем исследования дополнительных лучших практик перспективы, COM и программирования MAPI, мы получили более четкое изображение того, что могло пойти не так, как надо и думало о новых вещах попытаться исправить ошибки, которые в конечном счете фиксировали их.

  • Попытка усилить проблему. Если будет проблема, которая только иногда происходит, то я попытаюсь найти способы заставить ее постоянно происходить. Это помогло разыскать ошибки в веб-приложениях под IE и также сузить отказывающую ошибку во флеш-плагине.

  • , Когда все остальное перестало работать, я переписал подсистему, которая вызвала проблемы с нуля. Это может занять несколько дней или даже недели, но если Вы застреваете на ошибке и не можете разрешить его, и клиенты не возьмут не для ответа, что еще можно сделать? Это не всегда чинит вещи, но если это не делает, Вы обычно получаете более четкое изображение того, что идет не так, как надо.

я заметил несколько общностей в этих ошибках, что я застреваю на в течение многих недель:

  • Выяснение у третьих сторон для справки редко помогает, и это обычно не, хорошая идея ожидать кого-то еще для прибытия спасает положение.

  • Почти всегда отказ в некоторой сторонней технологии закрытого исходного кода, особенно при использовании неясных частей. IE имел противные ошибки при попытке использовать клиентские сертификаты. Flash не имел дело хорошо со случайным образом сгенерированными инструкциями по рисунку (некоторые из которых были бессмысленны). Outlook не нравится он, когда Вы пытаетесь изменить макет формы динамично из кода. В эти дни я учился уважать "зоны комфорта" собственной технологии.

2
ответ дан 27 November 2019 в 17:28
поделиться

Существует много хороших советов здесь.

Тот, с которым я абсолютно не соглашаюсь, является понятием изменения кода, надеясь, что это уйдет. Прежде всего, Вы, вероятно, попытка представить новые ошибки. Секунды, можно легко изменить вещи достаточно для сокрытия ошибки только, чтобы иметь его переповерхность снова со следующим патчем.

ошибки Повреждения памяти, особенно вероятно, исчезнут так волшебно, как они поднимаются. Однако ошибка повреждения памяти не является фиксацией, это только, что нефатальные области памяти становятся поврежденными.

1) Попытка другой отладчик. Например, я использую WinDbg все более часто. При загрузке программы в отладчике расположение памяти для приложения изменится немного. Возможно, другая причина отладчика ошибка проявить немного по-другому.

2), Если Вы обращаетесь к изменяющемуся коду, не зная точно, какова проблема, затем если ошибка уходит, , ВЫ ДОЛЖНЫ возвращаться и понимать, почему изменение исправило ошибку. Иначе Вы, вероятно, просто скрываете ошибку.

3) Говорят с другими об ошибке, возможно, они видели различные версии той же проблемы (т.е. другие способы воссоздать ее)

4) Вход.

2
ответ дан 27 November 2019 в 17:28
поделиться

"Что Вы делаете в этой ситуации (кроме обращения за помощью к другим для справки, которая не всегда возможна)?"

, Когда не возможно обратиться за помощью?

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

, Понимание, когда обратиться за помощью, не должно деморализовать!

2
ответ дан 27 November 2019 в 17:28
поделиться

Серьезно? Я делаю вещи в этом порядке.

  1. Ложатся спать
  2. , Просят, чтобы коллега
  3. Переписал так область, не затронут.
  4. Спрашивают ТАК
  5. Повышение запрос в службу поддержки с Вашим сторонним поставщиком библиотеки.
2
ответ дан 27 November 2019 в 17:28
поделиться

Много больших ответов здесь. Одна вещь это работало на меня в прошлом, состоит в том, чтобы спросить, "что я могу сделать для создания этого полностью очевидным, когда эта проблема произошла?".

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

Или, если проблемой является "случайная" перезапись памяти, используют замену malloc () / свободный () реализация, которая захватывает запись в "свободную" память (как электрический забор или dmalloc).

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

2
ответ дан 27 November 2019 в 17:28
поделиться

У меня определенно были ошибки, которые я продолжил работать в течение 4-5 дней непрерывно прежде, чем найти решением. Другие ошибки находились в средстве отслеживания ошибки в течение многих месяцев, когда я вставил несколько часов, распространенных за длительный промежуток времени. Я думаю, что этот вид ошибки неизбежен в любом сложном проекте программного обеспечения.

Некоторый материал, который работает хорошо на меня:

  • двоичный поиск через процесс выполнения программы с входом
  • использование Trace операторы наряду с DbgView для поиска ошибок, которые обнаруживаются в режиме выпуска
  • , находят, что альтернативный способ воспроизвести ошибку, не изменяя код
  • (работы против логики, но...) изменяет код так, чтобы ошибка была более легко восстанавливаема (состояние отказа с большей готовностью достигается)
  • сон на нем, и попробуйте еще раз завтра с новой парой глаз :)

, худший вид ошибки, по-моему, является ошибкой параллелизма, которая исчезает, когда вход вставляется.

3
ответ дан 27 November 2019 в 17:28
поделиться

Если все остальное перестало работать, не занимайтесь им непосредственно. Перепишите код проблемной области более пересмотренным способом.

3
ответ дан 27 November 2019 в 17:28
поделиться

Я обычно прошу, чтобы кто-то еще смотрел на код. В то время как я объясняю, что код, как предполагается, делает, я иногда вижу ошибку так же, как я говорю.

, Когда ошибка является жесткой, я сижу и работаю, пока я не понимаю это и решаю проблему. Интересно достаточно существуют времена, когда ловля таинственной ошибки более приятна, чем все работающее гладко. И облегчение и чувствующий, когда ошибка разрешена, ну, в общем, не много других вещей, может разбить это (кроме очевидных).

6
ответ дан 27 November 2019 в 17:28
поделиться

Кавычка, взятая от" Cryptonomicon":

"Интуиция, как вспышка молнии, длится только в течение секунды. Это обычно прибывает, когда каждый замучен трудной дешифровкой и когда каждый рассматривает в его уме бесплодные эксперименты, которые уже попробовали. Внезапно свет прорывается, и каждый находит после нескольких минут, что предыдущие дни работы не могли показать".

6
ответ дан 27 November 2019 в 17:28
поделиться

Создайте автоматизированный способ вызвать ошибку. Худшая ошибка для фиксации является той, которая занимает часы для репродуцирования.

9
ответ дан 27 November 2019 в 17:28
поделиться

Я делаю много разных вещей:

  • выводят все мои предположения и запускаются с нуля. Помните, ошибка существует, потому что что-то, что кажется корректным, на самом деле неправильно. Даже те строки или функции или классы, что Вы абсолютно уверены, корректны, может быть неправильным. Пока Вы не можете убедить себя в правильности, что не можете предположить, что что-либо правильно.

  • продолжают включать операторы печати и операторы контроля, чтобы устранить вещи и позволить мне преобразовывать новые предположения.

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

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

  • остановка в течение дня. Удивительно, какая офлайновая обработка Вашего мозга сделает в течение ночи. Часто ответ или ключевое понимание будут появляться на следующий день, в то время как я делаю что-то бессмысленное как то, чтобы литься или управление.

12
ответ дан 27 November 2019 в 17:28
поделиться

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

Hope это помогает.

1
ответ дан 27 November 2019 в 17:28
поделиться

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

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

(я забываю точную ошибку, это было, вероятно 59 ERROR_UNEXP_NET_ERR или возможно 65 ERROR_NETWORK_ACCESS_DENIED. Как я вспоминаю, это даже не был один из зарегистрированных кодов ошибок, которые Вы, как предполагалось, смогли получить от API, который мы называли, который обычно был блокировкой, или разблокируйте запрос к разделу файла).

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

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

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

я затем установил пакетный инструмент сниффинга в сети. (В то время, когда я использовал Microsoft Network Monitor ). Я расположил его, где это сможет "видеть" этот пакет UDP, когда это было отправлено, а также вся коммуникация между кластерными серверами и файловым сервером.

у самых хороших снифферов есть режим, где у Вас может быть он получение, пока он не видит конкретную часть трафика, затем остановитесь. Я включил тот режим и установил его для поиска того пакета UDP, который отправит мой код. Цель состояла в том, чтобы закончиться с захватом пакетов всего трафика файлового сервера прямо, прежде чем ошибка произошла. Самые последние сетевые пакеты к и от системы, где порожденный пакет UDP, по-видимому, был бы большой подсказкой относительно того, что происходило.

я установил движение конфигурации "стресс-теста" и пошел домой в течение выходных.

, Когда я возвратился в понедельник, о чудо у меня были свои данные. Сниффер остановился столь же ожидаемый после многих часов выполнения и содержал получение. После изучения получения, что я нашел, был то, что Блок серверных сообщений или SMB (иначе CIFS иначе SAMBA) соединение между нашим сервером и файловым сервером было на самом деле таймаут на уровне TCP из-за экстремального значения, загружающегося на сервере. Поскольку весь материал Microsoft в большой степени разделен на уровни, он проник бы, создают резервную копию через стопку совместного доступа к файлам как "неожиданная" ошибка вместо того, чтобы возвратить более понятный код ошибки, в котором было сказано "эй, Вы потеряли свое соединение на уровне TCP".

я действительно немного больше исследовал на настройки TCP для Windows , и о чудо значения по умолчанию для версии Windows, который мы использовали (вероятно, NT 4 в ту эру) были совершенно не щедры. Это только допускало очень небольшое количество отказов на соединении TCP и буме, Вы были мертвы. После того как Вы потеряли свое соединение SMB с файловым сервером, все Ваши блокировки файла были тостом и не было никакого способа восстановиться.

, Таким образом, я закончил тем, что писал приложение к руководству пользователя , которое объяснило, как изменить настройки TCP в Windows для создания кластерного сервера немного более терпимым к высоким ситуациям с загрузкой. И это было этим. Фиксация к ошибке была нулевое изменение в коде , просто некоторая дополнительная документация по тому, как правильно настроить ОС для использования этим продуктом.

, Что мы изучили?

  • быть готовым выполнить измененные версии Вашего кода для исследования проблемы
  • Рассматривают использование нетрадиционных инструментов для решения проблемы (снифферы)
  • Не, все исправления ошибок требуют изменений кода
  • Иногда, можно диагностировать ошибку, дома имея пиво
19
ответ дан 27 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

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