Lorsque vous apportez un support technique pour les clients, nous voyons souvent des anomalies de nombreux clients. Après avoir éliminé ces anomalies, la vitesse d'exécution du code a été considérablement améliorée par rapport auparavant. Cela nous permet de supposer que l'utilisation d'anomalies dans le code apportera des frais généraux significatifs. Parce que les anomalies sont une partie importante de la mauvaise situation, il est impossible d'abandonner, nous devons donc mesurer l'impact du traitement anormal sur les performances.
expérience
Mon expérience est basée sur un code simple simple qui lance au hasard. Dans une perspective scientifique, ce n'est pas une mesure complètement précise, et en même temps, je ne sais pas comment faire le code d'exploitation dans le code en cours d'exécution. Mais en tout cas, ce code devrait nous permettre de comprendre certaines situations de base.
Le résultat est très intéressant: le coût du lancer et de la capture des anomalies semble être extrêmement faible. Dans mon exemple, il s'agit d'environ 0,02 milliseconde. À moins que vous ne jetiez vraiment trop d'anomalies (nous entendons 100 000 ou plus), cela est essentiellement ignoré. Bien que ces résultats montrent que le traitement anormal lui-même n'affecte pas les performances du code, elle n'a pas résolu le problème suivant: qui est responsable de l'énorme impact sur les performances?
J'ai évidemment raté les problèmes importants.
Après y avoir réfléchi, j'ai réalisé que j'avais raté une partie importante du traitement anormal. Je n'ai pas considéré ce que vous avez fait lorsque des anomalies se sont produites. Dans la plupart des cas, vous n'êtes probablement pas seulement pour capturer des anomalies! Le problème est ici: Généralement, vous essairez de compléter le problème et de laisser l'application toujours jouer avec l'utilisateur final. Donc, ce que j'ai manqué, c'est: "" "" Code supplémentaire "" pour gérer les anomalies. Selon les différents code, la perte de performances peut devenir assez importante. Dans certains cas, cela peut signifier se concentrer sur la connexion au serveur, et dans d'autres cas, cela peut signifier utiliser la solution de retour par défaut, et la solution fournie par cette solution apportera certainement de très mauvaises performances. Cela semble donner une bonne explication du comportement que nous voyons dans de nombreux cas.
Cependant, je ne pense pas que l'analyse soit tout ici, mais je pense que quelque chose d'autre a été manqué ici.
Trace de pile
Je suis toujours curieux de ce problème, et pour cette raison, j'ai surveillé comment les performances changent lors de la collecte de la trace de strack.
C'est le cas qui se produit souvent: pour noter la trajectoire anormale et sa trajectoire de pile, essayez de savoir où se trouve le problème.
Pour cette raison, j'ai modifié le code et collecté la trace de stack anormale. Cela a considérablement changé la situation. L'effet de performance sur la collecte de traces de étranglement anormaux est 10 fois plus élevée que la simple capture et le lancement d'anomalies. Par conséquent, bien que Strack Trace aide à comprendre où se produisent les problèmes (cela peut aider à comprendre pourquoi les problèmes se produisent), il y a des pertes de performances. Puisque nous ne parlons pas d'une trace de strack, l'impact ici est souvent très grand. Dans la plupart des cas, nous devons lancer et capturer des anomalies à plusieurs niveaux. Regardons un exemple simple: le client du service Web est connecté au serveur. Tout d'abord, il y a une anomalie au niveau de la bibliothèque Java. Depuis lors, il y aura des clients anormaux au niveau du cadre, et il peut y avoir des appels de logique commerciale anormaux au niveau de l'application à l'avenir. Jusqu'à présent, un total de trois traces de stack doit être collectée. Dans la plupart des cas, vous pouvez voir ces traces de stack à partir de fichiers journaux ou de sortie d'application, et écrire ces longues traces de stack a souvent également également des effets de performance.
en conclusion
Tout d'abord, il n'est pas bon de rejeter des anomalies anormales en raison de l'impact de la performance. Inhabituel aide à fournir un moyen cohérent de résoudre les problèmes de fonctionnement et de rédiger du code propre. Mais nous devons suivre la quantité anormale lancée dans le code, ce qui peut provoquer des effets de performance significatifs. Par conséquent, ONEAPM doit suivre les anomalies lancées par défaut - Dans de nombreux cas, les gens seront surpris par les anomalies du code et la perte de performance lors de la résolution de ces anomalies. Deuxièmement, bien qu'il soit très bénéfique à utiliser, vous devez également éviter de capturer trop de trace de stack. Des anomalies doivent être conçues pour des conditions anormales, et ce principe doit être gardé à l'esprit lors de l'utilisation. Bien sûr, au cas où vous ne voudrez pas suivre de bonnes habitudes de programmation, la langue Java vous fera savoir que cela peut faire fonctionner votre programme plus rapidement et vous encourager à le faire.
Ce qui précède est tout le contenu de cet article.