Mejora el rendimiento de tus programas Go utilizando la técnica de creación de perfiles.
La creación de perfiles es una técnica comúnmente utilizada en el ciclo de desarrollo de software para analizar el rendimiento de un programa, generalmente para una comparación entre programas o para identificar cuellos de botella y áreas de mejora para un programa. La creación de perfiles implica medir y analizar varias métricas, como el uso de la memoria, la utilización de la CPU, el tiempo de ejecución y otras estadísticas a nivel del sistema.
La creación de perfiles tiene como objetivo identificar las partes de un programa que consumen la mayor cantidad de recursos para que pueda optimizarse para un mejor rendimiento. La creación de perfiles también puede ayudar con la depuración, la optimización de la gestión de la memoria y el ajuste de la concurrencia.
Perfilado en Go
Hay muchas herramientas para crear perfiles en Go. Algunas herramientas populares incluyen la herramienta de creación de perfiles pprof incorporada de Go y paquetes populares de terceros como los paquetes Go Tool Trace y Go-Torch.
El pprof El paquete es parte del tiempo de ejecución paquete. El pprof El paquete proporciona funcionalidad para escribir datos de perfilado en tiempo de ejecución en formatos que el pprof herramienta de visualización puede interpretar.
Así es como puede importar el pprof paquete en sus programas Go:
importar"pprof"
Go proporciona varios comandos y banderas para trabajar con el código fuente. Ejecute lo siguiente herramienta Comando para acceder a los resultados de perfiles en varios formatos.
ir herramienta pprof
El comando genera los detalles de uso sobre el pprof dominio.
Perfilado de CPU en Go
La creación de perfiles de CPU mide el tiempo que pasa un programa mientras ejecuta funciones. La creación de perfiles de CPU es útil para identificar partes del código que consumen la mayor parte del tiempo de CPU.
El pprof El paquete proporciona funciones para recopilar perfiles de CPU, iniciar y detener la creación de perfiles de CPU y una función para escribir datos de perfil en archivos.
Aquí se explica cómo iniciar y detener un perfil de CPU y escribir los datos en un archivo de creación de perfiles:
importar (
"os"
"tiempo de ejecución/pprof"
)funciónprincipal() {
f, errar := os. Crear("cpu_perfil.prof")
si error! = nulo {
pánico(errar)
}
aplazar F. Cerca()err = pprof. Perfil de CPU de inicio (f)
si error! = nulo {
pánico(errar)
}
aplazar prof. DetenerCPUProfile()
// código a perfilar
}
El principal La función crea un archivo y cierra la secuencia de archivos con un aplazar declaración y la Cerca función de la instancia del archivo. El Perfil de CPU de inicio La función inicia un perfil de CPU y escribe los datos en el archivo, y el DetenerCPUPerfil cierra el flujo de perfil con un aplazar declaración. Después de iniciar y detener el perfil de la CPU, puede proceder a escribir el código que desea analizar.
Aquí está el resultado de ejecutar el pprof comando con el archivo de perfil del programa:
ejecutando el pprof El comando con un archivo inicia un shell interactivo que le permite explorar los datos de creación de perfiles. Puedes usar comandos como arriba y lista para ver las funciones que tardan más tiempo en ejecutarse.
Creación de perfiles de memoria en Go
La creación de perfiles de memoria es una técnica que se utiliza para identificar fugas de memoria y uso costoso de memoria en el código midiendo el uso de memoria de las funciones en el código.
Puede iniciar un perfil de memoria con el WriteHeapProfile función. El WriteHeapProfile La función toma la instancia del archivo y escribe los datos del perfil en el archivo.
importar (
"os"
"tiempo de ejecución/pprof"
)funciónprincipal() {
f, errar := os. Crear("perfil_mem.prof")
si error! = nulo {
pánico(errar)
}
aplazar F. Cerca()err = pprof. Escribir perfil de montón (f)
si error! = nulo {
pánico(errar)
}
// código a perfilar
}
El principal La función crea un archivo de perfiles, y el WriteHeapProfile La función toma la instancia del archivo como argumento y devuelve un tipo de error de escritura después de escribir en el archivo. Puedes seguir manejar el error de acuerdo a su requerimiento.
Perfilado de bloques con Go
El perfilado de bloques mide el tiempo de espera de un programa para las primitivas de sincronización, como mutexes y canales. La creación de perfiles de bloques es útil para identificar partes del código que pueden causar bloqueos.
El Buscar función devuelve el perfil con el nombre de una cadena especificada, y el Escribir a función de la Buscar La función escribe una instantánea del perfil con formato pprof en el archivo.
Así es como puede implementar el perfilado de bloques para sus programas Go:
importar (
"os"
"tiempo de ejecución/pprof"
)funciónprincipal() {
f, errar := os. Crear("perfil_bloque.prof")
si error! = nulo {
pánico(errar)
}
aplazar F. Cerca()err = pprof. Buscar("bloquear").Escribir en (f, 0)
si error! = nulo {
pánico(errar)
}
// código a perfilar
}
El programa crea un archivo para almacenar los datos del perfil del bloque, busca bloques con el Buscar y escribe los datos del perfil del bloque en el archivo.
Creación de perfiles de seguimiento con Go
La creación de perfiles de seguimiento es una técnica para medir la ejecución de un programa, incluida la programación de rutinas y las llamadas al sistema. La creación de perfiles de seguimiento es útil para identificar cuellos de botella en el rendimiento y comprender las interacciones entre las diferentes partes del programa.
El rastro El paquete proporciona funciones para la creación de perfiles de seguimiento. Este paquete también es parte del tiempo de ejecución paquete.
importar (
"os"
"tiempo de ejecución/rastreo"
)funciónprincipal() {
f, errar := os. Crear("trazar")
si error! = nulo {
pánico(errar)
}
aplazar F. Cerca()error = rastro. Inicio (f)
si error! = nulo {
pánico(errar)
}
aplazar rastro. Detener()
// código a perfilar
}
El programa crea un archivo de rastreo para almacenar los datos de rastreo, inicia el rastreador con el Comenzar función que toma la instancia del archivo y devuelve un tipo de error, y difiere el rastreador con el Detener función.
Go también proporciona herramientas para formatear el código fuente. Junto con las herramientas de creación de perfiles, puede utilizar las herramientas de formato para mantener los estándares del código. El gofmt tool es una herramienta de formateo integrada que puede usar para formatear su código fuente de Go según las reglas especificadas para sus paquetes.