Cuando se brinda soporte técnico a los clientes de OneAPM, a menudo vemos muchas excepciones que los clientes no conocen. Después de eliminar estas anomalías, el código se ejecuta a una velocidad mucho más rápida que antes. Esto nos da la conjetura de que el uso de excepciones en el código puede tener una sobrecarga de rendimiento significativa. Debido a que las excepciones son una parte importante del manejo de errores, no es posible descartarlos, por lo que necesitamos medir el impacto del manejo de excepciones en el rendimiento. Podemos observar el impacto del manejo de excepciones en el rendimiento a través de un experimento.
Experimento
Mi experimento se basa en un código simple que lanza una excepción al azar. Desde un punto de vista científico, esta no es una medida completamente precisa, y no sé qué hará el compilador HotSpot con el código en ejecución. Pero de todos modos, este código debería darnos alguna información básica.
Los resultados son muy interesantes: el costo de lanzar y atrapar excepciones parece ser extremadamente bajo. En mi caso, es alrededor de 0.02 milisegundos por excepción. A menos que realmente lances demasiadas excepciones (nos referimos a 100,000 veces o más), esto es básicamente insignificante. Aunque estos resultados muestran que el manejo de excepciones en sí no afecta el rendimiento del código, no resuelve el siguiente problema: ¿Quién es responsable del enorme impacto de la excepción en el rendimiento?
Obviamente me perdí algunos problemas importantes.
Repensando un poco, me di cuenta de que me había perdido una parte importante del manejo de excepciones. No pensé en lo que hiciste cuando ocurrió la excepción. En la mayoría de los casos, es más probable que atrape una excepción. Y el problema está aquí: en general, intentará complementar el problema y dejar que la aplicación siga funcionando en el usuario final. Entonces, lo que me perdí es: " " El código complementario que se ejecutó para manejar la excepción " ". La pérdida de rendimiento puede llegar a ser bastante significativa dependiendo del código suplementario. En algunos casos, esto puede significar volver a intentar conectarse al servidor, y en otros casos puede significar el uso del esquema de reversión predeterminado, y la solución provista por este esquema definitivamente traerá un rendimiento muy bajo. Esto parece dar una buena explicación para el comportamiento que vemos en muchos casos.
Pero no creo que esté bien analizarlo aquí, pero creo que aquí falta algo más.
Stack trace
Todavía siento curiosidad por este problema, al monitorear el rendimiento de la situación al recopilar rastros de strack.
La situación que ocurre a menudo debería ser así: escriba la excepción y su trayectoria de pila y trate de averiguar dónde está el problema.
He modificado el código para esto y, además, recopilé una traza de excepción. Esto hace que la situación cambie dramáticamente. La recopilación de trazas de stracks anómalas tiene un impacto en el rendimiento que es 10 veces mayor que simplemente capturar y lanzar excepciones. Por lo tanto, si bien el seguimiento de huelga ayuda a entender dónde algo salió mal (y posiblemente ayuda a entender por qué ocurrió el problema), hay una penalización en el rendimiento. Ya que no estamos hablando de un rastro de strack, el impacto aquí es a menudo muy grande. En la mayoría de los casos, lanzamos y atrapamos excepciones en múltiples niveles. Veamos un ejemplo simple: el cliente del servicio web se conecta al servidor. Primero, hay una excepción de falla de conexión en el nivel de la biblioteca de Java. Después de eso, habrá una excepción de fallo de cliente en el nivel de marco, y luego puede haber una excepción de fallo de llamada de lógica empresarial en el nivel de aplicación. Hasta el momento, se han recogido un total de tres rastros de strack. En la mayoría de los casos, puede ver estos rastreos de strack desde los archivos de registro o el resultado de la aplicación, y la escritura de estos rastreos de strack largos también tendrá un impacto en el rendimiento.
Conclusión
En primer lugar, no es una buena idea abandonar la anomalía debido al impacto en el rendimiento. Las excepciones ayudan a proporcionar una manera consistente de resolver problemas de tiempo de ejecución y ayudan a escribir código limpio. Pero debemos rastrear el número de excepciones lanzadas en el código, lo que puede causar un impacto significativo en el rendimiento. Por lo tanto, OneAPM hará un seguimiento de las excepciones lanzadas por defecto — — en muchos casos, las personas se sorprenderán de las excepciones que ocurren en el código y la penalización de rendimiento al resolver esas excepciones. En segundo lugar, aunque es útil utilizar excepciones, debe evitar capturar demasiados rastros de strack. Las excepciones deben estar diseñadas para situaciones anómalas y deben tenerse en cuenta al usarlas. Por supuesto, en caso de que no quiera seguir buenos hábitos de programación, el lenguaje Java le permitirá saber que hacerlo acelerará su programa y lo alentará a hacerlo.
Muchos amigos a los que les gusta cantar pueden optar por utilizar la plataforma de esta red para mo
de múltiples núcleos Recientemente, algunos internautas le preguntaron a win7 computadora cómo abr
Hay comentarios de los usuarios utilizando Win7 Ultimate. Después de instalar el controlador de gráf
en el sistema Win8 Nueva función de geolocalización Geo-location en Windows8. Windows 8 se basa en
¿Cómo configurar los mosaicos activos de Win10 Build 9926 directamente en el escritorio?
Win10 Mobile Preview 10166 Store Surprise Bug Reinstallable ha eliminado la aplicación
clave de activación de empresa win8.1 clave de activación de empresa lo win8.1 Daquan
Win10 abre la misma aplicación en diferentes escritorios virtuales
Windows 10 PC /Mobile Build 14965 Preview Edition Push: PC Side mejorado
Win7 abrir programa de Word mensaje de error de macro es lo que es la razón de cómo resolver
Win7 no puede elegir la solución del programa personalizado en el modo abierto
La versión de Office Win10 no puede abrir cómo hacerlo
¿Win10 no está en modo de espera? Windows10 configura la computadora no tiene modo de espera
Cómo habilitar la sincronización automática en el sistema Win10 OneNote?
La visualización de íconos de Win10 no es normal, ¿cómo resolver? Dos métodos pro test efectivos
Shell Linux si la declaración resumen de uso del sistema
Raiders de la aplicación de políticas de grupo del sistema operativo Windows (1)
¿Cuál es el error al eliminar la clave de registro en Windows 7? Cómo resolver
¿Qué debo hacer si recibo un error en la reparación del disco en Win8.1?
Cómo resolver el problema que la "búsqueda" de Windows XP no funciona
Linuxshell implementa el script para limpiar automáticamente los archivos de copia de seguridad rman
¿Qué pasa si Win10 no puede ejecutar el archivo por lotes verde?