Lab 2.2 Capturar archivos de volcado con ProcDump en Linux
Se aplica a: .NET Core 2.1, .NET Core 3.1, .NET 5
En este artículo se describe la instalación de la herramienta ProcDump y cómo capturar archivos de volcado de memoria de .NET Core mediante ProcDump en Linux.
Requisitos previos
Los requisitos mínimos para seguir estos laboratorios de solución de problemas son los siguientes:
- Una ASP.NET Core para demostrar problemas de rendimiento de CPU baja y cpu alta y problemas de bloqueo.
- El depurador lldb, instalado y configurado para cargar la extensión SOS cuando se abre un archivo de volcado de memoria.
Si ha seguido las partes anteriores de esta serie, debe tener lista la siguiente configuración:
- Nginx está configurado para hospedar dos sitios web:
- El primero escucha las solicitudes mediante el encabezado de host myfirstwebsite ( ) y las solicitudes de enrutamiento a la aplicación de demostración ASP.NET Core que escucha en el puerto
http://myfirstwebsite5000. - El segundo escucha las solicitudes mediante el encabezado de host de buggyamb ( ) y las solicitudes de enrutamiento ASP.NET Core la segunda aplicación de ejemplo de errores que escucha en el puerto
http://buggyamb5001.
- El primero escucha las solicitudes mediante el encabezado de host myfirstwebsite ( ) y las solicitudes de enrutamiento a la aplicación de demostración ASP.NET Core que escucha en el puerto
- Ambas ASP.NET Core deben ejecutarse como servicios que se reinician automáticamente cuando se reinicia el servidor o la aplicación deja de responder.
- El firewall local de Linux está habilitado y configurado para permitir el tráfico SSH y HTTP.
Nota
Si la configuración no está lista, vaya a "Part 2 Create and run ASP.NET Core apps."
Objetivo de este laboratorio
En los laboratorios anteriores, aprendió a analizar un problema de bloqueo o rendimiento. Usó la herramienta createdump para capturar archivos de volcado.
Ahora, instalará ProcDump y capturará los archivos de volcado de datos principales mediante ProcDump. Esa será la extensión de este laboratorio porque trabajará en el mismo escenario que investigó en la parte anterior.
ProcDump
Según la página oficial de la versión linux de ProcDump,"ProcDump es una nueva versión de Linux de la herramienta procDump clásica del conjunto de herramientas Sysinternals para Windows".
La versión de Linux tiene algunas limitaciones en comparación con la Windows versión. No admite todas las características que ofrece Windows versión de la herramienta. Por ejemplo, no se puede configurar para recopilar archivos de volcado de memoria cuando el proceso se bloquea o produce una excepción de primera oportunidad.
Sin embargo, sigue siendo eficaz. La siguiente lista de opciones de línea de comandos va mucho más allá para demostrar la solidez de la herramienta:
-C: Trigger core dump generation when CPU exceeds or equals specified value (0 to 100 * nCPU)
-c: Trigger core dump generation when CPU is less than specified value (0 to 100 * nCPU)
-M: Trigger core dump generation when memory commit limit exceeds or equals specified value (MB)
-m: Trigger core dump generation when memory commit limit is less than specified value (MB)
-T: Trigger core dump generation when thread count exceeds or equals specified value.
-F: Trigger core dump generation when filedescriptor count exceeds or equals specified value.
Las instrucciones de instalación se detallan en Install ProcDump. Recuerde que se le indicó que agregara el repositorio de paquetes de Microsoft antes de instalar .NET Core. ProcDump usa el mismo repositorio. Por lo tanto, puede instalar directamente la herramienta mediante el sudo apt install procdump comando.
Puede usar ProcDump para supervisar los usos de CPU, memoria, subprocesos o descriptores de archivos.
Puede usar ProcDump para capturar un archivo de volcado de memoria cuando la CPU o el uso de memoria del proceso de destino alcanza un umbral determinado o cae por debajo de un valor límite. Sin embargo, para este ejercicio, usará el método más sencillo para invocar la herramienta: procdump -p <PID> . Esto crea manualmente un archivo de volcado del proceso.
Capturar un archivo de volcado de memoria del mismo proceso. Tenga en cuenta que tendrá que ejecutar el comando mediante sudo .
¿Dónde crea ProcDump los archivos de volcado de datos principales?
Esta es la información que seguramente tendrá que conocer. Puede dedicar mucho tiempo a intentar saber dónde se crean los archivos de volcado cuando ProcDump se usa para capturar archivos de volcado de datos principales.
El resultado de ProcDump no está claro dónde se crean los archivos de volcado de datos principales. Como se muestra en la captura de pantalla anterior, el resultado simplemente escribe el nombre del archivo, pero no la ruta de acceso real.
Dado que las otras herramientas suelen usar los directorios /tmp/ o, puede que piense que ProcDump también usa /var/lib/systemd/coredump/ uno de estos directorios. Sin embargo, este no es el caso. En su lugar, los archivos de volcado capturados por ProcDump se crean en el ASP.NET Core de trabajo de la aplicación.
El directorio de trabajo de la aplicación se define en el archivo de unidad de control de servicio. Como puede ver en la siguiente captura de pantalla, el directorio de trabajo de la aplicación de ejemplo es /var/BuggyAmb_v1.1. Por lo tanto, cualquier archivo de volcado que ProcDump cree para esta aplicación se colocará en el directorio /var/BuggyAmb_v1.1.
Escenario de ejemplo: capturar archivos de volcado en función del uso de memoria
Imagine la siguiente situación:
- Está experimentando un consumo de memoria alto en una ASP.NET Core que está hospedando.
- El consumo alto de memoria se produce aleatoriamente y no sabes cómo reproducir el problema. Solo sabe que el problema se inicia cuando el uso de memoria de confirmación para el proceso que hospeda la aplicación alcanza los 750 MB.
- Dado que no puede supervisar continuamente el uso de memoria, desea automatizar el proceso de recopilación de volcados. El objetivo es capturar dos archivos de volcado consecutivos del mismo proceso después de que el uso de memoria supere el umbral de 750 MB.
- Desea capturar dos archivos de volcado de memoria, con al menos un intervalo de cinco segundos entre la generación del primer y segundo archivo de volcado de memoria.
De acuerdo con la Ayuda de ProcDump, estos son los modificadores que tendrás que usar:
-M: desencadenar la generación de archivos de volcado de memoria cuando la confirmación de memoria supere o sea igual al valor especificado (MB)-n: Número de archivos de volcado de memoria que se escribirán antes de salir (el valor predeterminado es 1)-s: segundos consecutivos antes de que se escriba el archivo de volcado (el valor predeterminado es 10)-d: Escribir registros de diagnóstico en Syslog-p: PID del proceso
Ejecute el comando sudo procdump -p 11724 -n 2 -s 5 -M 750. Verá que ProcDump espera hasta que se cumplan los criterios definidos por los argumentos que se le pasan, o hasta que decida finalizar la fase de supervisión presionando Ctrl+C.
Mientras ProcDump supervisa el uso de memoria, reproduzca el mismo problema enviando seis solicitudes al escenario lento mediante la característica de la aplicación web de Load Generator nuevo. Una vez que el uso de memoria alcanza el umbral, ProcDump crea archivos de volcado. En la siguiente captura de pantalla se muestran dos archivos de volcado capturados.
Los archivos de volcado se escriben en el directorio de trabajo, igual que en el caso del archivo de volcado de memoria manual que creó anteriormente.
Los archivos de volcado que se crean mediante createdump y ProcDump son idénticos en términos de la información que contienen. Puedes elegir la herramienta que creas más adecuada para el escenario al que te enfrentas al solucionar estos problemas.
Siguientes pasos
Laboratorio 3 Solución de problemas de rendimiento y GC con dotnet-dump en Linux
El laboratorio 3 analiza otras opciones para trabajar con archivos de volcado de memoria mediante dotnet-dump y dotnet-gcdump .