Принимая техническую поддержку для клиентов, мы часто видим аномалии многих клиентов вообще. После устранения этих аномалий, скорость работы кода была значительно улучшена по сравнению с ранее. Это позволяет нам предположить, что использование аномалий в коде принесет значительную производительность накладных расходов. Поскольку аномалии являются важной частью неправильной ситуации, их невозможно отказаться, поэтому нам необходимо измерить влияние ненормального лечения на производительность.
эксперимент
Мой эксперимент основан на простом простом коде, который случайным образом бросает. С научной точки зрения это не является совершенно точным измерением, и в то же время я не знаю, как выполнить операционный код в запущенном коде. Но в любом случае этот код должен позволить нам понять некоторые основные ситуации.
Результат очень интересный: стоимость броска и захвата аномалий, кажется, чрезвычайно низкая. В моем примере это около 0,02 миллисекунд. Если вы действительно не бросаете слишком много аномалий (мы имеем в виду 100 000 или более), это в основном игнорируется. Хотя эти результаты показывают, что сама аномальная обработка не влияет на производительность кода, она не решила следующую проблему: кто отвечает за огромное влияние на производительность?
Я, очевидно, пропустил какие -либо важные проблемы.
Подумав об этом снова, я понял, что пропустил важную часть ненормального лечения. Я не учитывал то, что вы сделали, когда произошли нарушения. В большинстве случаев вы, вероятно, не только для того, чтобы захватить аномалии! Проблема здесь: как правило, вы попытаетесь дополнить проблему и позволить приложению все еще играть с конечным пользователем. Итак, я пропустил: «" "" Дополнительный код "" для обработки аномалий. В зависимости от различного кода потеря производительности может стать довольно значительной. В некоторых случаях это может означать сосредоточение внимания на соединении с сервером, а в других случаях это может означать использование решения для отката по умолчанию, а решение, предоставленное этим решением, определенно принесет очень плохую производительность. Похоже, что это дает хорошее объяснение поведения, которое мы видим во многих случаях.
Тем не менее, я не думаю, что анализ здесь - это все здесь, но я чувствую, что здесь было пропущено что -то еще.
Стек трассировки
Мне все еще любопытно по этой проблеме, и по этой причине я следил за тем, как изменяется производительность при сборе трассировки Strack.
Это тот случай, который происходит часто: записать аномальную и его траекторию стека, попытайтесь выяснить, где проблема.
По этой причине я изменил код и собрал ненормальную трассу. Это значительно изменило ситуацию. Эффект производительности на сборы аномальных трассов Strack в 10 раз выше, чем просто захват и бросает ненормальность. Следовательно, хотя Strack Trace помогает понять, где возникают проблемы (это может помочь понять, почему возникают проблемы), есть потери эффективности. Поскольку мы не говорим о трассировке Strack, влияние здесь часто очень велико. В большинстве случаев мы должны бросать и захватывать аномалии на нескольких уровнях. Давайте посмотрим на простой пример: клиент веб -службы подключен к серверу. Прежде всего, на уровне библиотеки Java существует аномалия. С тех пор на уровне фреймворта будут ненормальные клиенты, и в будущем могут быть ненормальные вызовы бизнес -логики на уровне приложения. До сих пор необходимо собирать три следа Strack. В большинстве случаев вы можете увидеть эти трассировки Strack из файлов журнала или вывода приложений, и написание этих длинных трассировков Strack часто также также оказывает эффекты производительности.
в заключение
Прежде всего, нехорошо отбросить аномальные аномалии из -за воздействия производительности. Необычный помогает обеспечить постоянный способ решить проблемы с эксплуатацией и помочь написать чистый код. Но мы должны отслеживать аномальное количество, добавленное в код, что может вызвать значительные эффекты производительности. Следовательно, OneApm должен отслеживать аномалии, выброшенные по умолчанию. Во многих случаях люди будут удивлены аномалиями в коде и потерей эффективности при решении этих нарушений. Во -вторых, хотя это очень полезно использовать, вы также должны избегать захвата слишком большого количества трассировки Strack. Аномалии должны быть разработаны для ненормальных условий, и этот принцип следует иметь в виду при использовании. Конечно, если вы не хотите следовать хорошим привычкам программирования, Java Language даст вам знать, что это может заставить вашу программу работать быстрее и побудить вас сделать это.
Выше всего содержимое этой статьи.