Ao fazer suporte técnico para os clientes, geralmente vemos as anormalidades de muitos clientes. Depois de eliminar essas anormalidades, a velocidade de execução do código foi bastante aprimorada em comparação com antes. Isso nos permite adivinhar que o uso de anormalidades no código trará uma sobrecarga significativa de desempenho. Como as anormalidades são uma parte importante da situação errada, é impossível abandonar, por isso precisamos medir o impacto do tratamento anormal no desempenho.
experimentar
Meu experimento é baseado em um código simples simples que joga aleatoriamente. De uma perspectiva científica, essa não é uma medição completamente precisa e, ao mesmo tempo, não sei como fazer o código operacional no código em execução. Mas, de qualquer forma, esse código deve nos permitir entender algumas situações básicas.
O resultado é muito interessante: o custo de lançar e capturar anormalidades parece ser extremamente baixo. No meu exemplo, são cerca de 0,02 milissegundos. A menos que você realmente jogue muitas anormalidades (queremos dizer 100.000 ou mais), isso é basicamente ignorado. Embora esses resultados mostrem que o processamento anormal em si não afeta o desempenho do código, ele não resolveu o seguinte problema: quem é responsável pelo enorme impacto no desempenho?
Obviamente, perdi quaisquer questões importantes.
Depois de pensar nisso novamente, percebi que perdi uma parte importante do tratamento anormal. Não considerei o que você fez quando as anormalidades aconteceram. Na maioria dos casos, você provavelmente não é apenas para capturar anormalidades! O problema está aqui: geralmente, você tentará complementar o problema e deixará o aplicativo ainda jogar com o usuário final. Então, o que eu perdi é: "" "" código suplementar "" para lidar com anormalidades. Dependendo do código diferente, a perda de desempenho pode se tornar bastante significativa. Em alguns casos, isso pode significar focar na conexão com o servidor e, em outros casos, pode significar o uso da solução de reversão padrão, e a solução fornecida por esta solução definitivamente trará um desempenho muito ruim. Isso parece dar uma boa explicação para o comportamento que vemos em muitos casos.
No entanto, não acho que a análise seja tudo aqui, mas sinto que algo mais foi perdido aqui.
Rastreamento da pilha
Ainda estou curioso sobre esse problema e, por esse motivo, monitorei como o desempenho muda ao coletar o rastreamento do strack.
É o caso que acontece com frequência: para anotar o anormal e sua trajetória de pilha, tente descobrir onde está o problema.
Por esse motivo, modifiquei o código e colecionei o rastreamento anormal. Isso mudou a situação significativamente. O efeito de desempenho na coleta de rastreamento anormal de strack é 10 vezes maior do que simplesmente capturar e lançar anormalidade. Portanto, embora o Strack Trace ajude a entender onde ocorrem problemas (pode ajudar a entender por que os problemas ocorrem), há perdas de desempenho. Como não estamos falando de um rastreamento de strack, o impacto aqui geralmente é muito grande. Na maioria dos casos, devemos lançar e capturar anormalidades em vários níveis. Vejamos um exemplo simples: o cliente de serviço da web está conectado ao servidor. Primeiro de tudo, há uma anormalidade no nível da biblioteca Java. Desde então, haverá clientes anormais no nível da estrutura e pode haver chamadas anormais de lógica de negócios no nível do aplicativo no futuro. Até agora, um total de três traços de strack deve ser coletado. Na maioria dos casos, você pode ver esses rastreamentos de strack a partir de arquivos de log ou saída de aplicativos, e escrever esses rastreamentos longos de strack geralmente também também têm efeitos de desempenho.
para concluir
Primeiro de tudo, não é bom descartar anormalidades anormais devido ao impacto do desempenho. Incomuns ajuda a fornecer uma maneira consistente de resolver os problemas operacionais e ajudar a escrever código limpo. Mas devemos rastrear a quantidade anormal lançada no código, o que pode causar efeitos significativos de desempenho. Portanto, o ONEAPM deve rastrear as anormalidades lançadas por padrão -em muitos casos, as pessoas ficarão surpresas com as anormalidades do código e a perda de desempenho ao resolver essas anormalidades. Em segundo lugar, embora seja muito benéfico de usar, você também deve evitar capturar muito rastreamento. As anormalidades devem ser projetadas para condições anormais, e esse princípio deve ser lembrado ao usar. Obviamente, caso você não queira seguir bons hábitos de programação, o idioma Java informará que isso pode fazer com que seu programa funcione mais rápido e incentivá -lo a fazer isso.
O acima é todo o conteúdo deste artigo. Espero que todos possam gostar.