![HCL Commerce Version 9.1.10.0 or later](../../base/images/91100plus.png)
Herramientas de monitoreo de hebras
Los Javacores, y las pilas de hebra en particular, son herramientas de depuración clave. La comparación de pilas entre hebras, y para diferentes puntos en el tiempo, puede ayudar a reducir la causa de la disminución del rendimiento.
La temporización es un factor principal al diagnosticar problemas utilizando Javacores y papeleras de subprocesos. Las papelera de subprocesos deben recopilarse en el momento exacto en que el servidor experimenta problemas de rendimiento. Algunos eventos son esporádicos y de corta duración, lo que dificulta la recopilación. A menudo, cuando se detecta un problema y se recopila una papelera manual, el problema ya ha pasado.
Recopilación de papelera de subprocesos automática
La herramienta monitorización de hebras automatiza la recopilación de papeleras de subprocesos. Ofrece opciones para el formato, la frecuencia y el desencadenamiento de papeleras. Se integra con la infraestructura de métricas para habilitar la generación de volcado automático cuando se alcanzan determinados umbrales, como el número de hebras en uso. Con esta configuración, el Monitor de hebras puede desencadenar automáticamente la recopilación de volcados durante picos o ralentizaciones.
El desencadenante, que se basa en el número de hebras en uso, requiere que las métricas se habiliten en values.yaml.
La herramienta de monitorización de hebras se configura con el siguiente YAML archivo que está disponible en los contenedores del servidor de transacciones, QueryApp, Solr Search y CRS. Las configuraciones incluyen el formato (es decir, volcado de hebras o Javacore), archivado y desencadenantes de umbral.
Para obtener detalles de cada opción de configuración, consulte el archivo YAML:
/SETUP/support/thread_monitor.yaml
El Monitor de hebras está habilitado de forma predeterminada desde HCL Commerce 9.1.9.
Está configurado para recopilar volcados en formato "hebra volcado" (un formato personalizado de HCL), cuando el número de hebras en uso en la agrupación de contenedor web/ ejecutor predeterminado supera el valor de umbral de 20. Recopilará un máximo de 10 papeleras por hora. Estas configuraciones se pueden actualizar para que coincidan mejor con el escenario que está depurando.
Los cambios en la configuración en thread_monitor.yaml se cargan automáticamente durante la ejecución. No es necesario reiniciar un contenedor.
Cuando se recopila una papelera debido al desencadenante del umbral webContainer.inUseLargerThan
, se incluirá el siguiente aviso en los registros:
[4/12/22 16:20:43:937 GMT] 00000124 WebContainerI W com.hcl.commerce.monitor.thread.triggers.WebContainerInUseTrigger
evaluateWebContainerUsage( final int inUse ) WebContainer threads in use 21 is higher than threshold of 20. Generating threaddump...
El Monitor de hebras también se puede habilitar e inhabilitar desde Vault configurando la variable de entorno como se indica a continuación:
${TENANT}/${ENVIRONMENT}/${ENVTYPE}/threadMonitorEnable/${component_name}: value=true
Utilidad ThreadAnalyzer
La herramienta Monitor de hebras genera Javacores o volcados de hebra en el directorio especificado por la variable de entorno DUMP_DIR . La utilidad ThreadAnalyzer se puede utilizar para facilitar el análisis. Esto es especialmente útil cuando se crean decenas o cientos de papeleras. La revisión manual puede llevar mucho tiempo.
La herramienta está disponible en los contenedores que habilitan el Monitor de hebras. Puede encontrarlo en la ruta siguiente: /SETUP/support/thread-analyzer.jar.
El uso es el siguiente:
java -jar thread-analyzer.jar
Use -y when running inside a container
usage: java -jar thread-analyzer.jar [options]
-c,--config <arg> Optional path to a Yaml configuration file
-d,--directory <arg> Directory or file where the dumps are found. If a
file is specified, only that dump is analyzed. If
the file is a Zip, all the dumps within the zips
are parsed. If the location is a directory, all
dumps and zips within the directory will be parsed
(this does not include subfolders). When not set,
the tool attempts to determine the directory to
use automatically. If a directory is not
discovered, it defaults to the current directory.
-f,--follow If enabled, the tool will continue to monitor for
new threaddumps. This option is ignored if the
parameter is a file, not a directory. When -f is
set, -t is ignored.
-h,--help Prints this help.
-r,--report <arg> Comma separated list of reports. Defaults to 'Base
Web Activity'.
-s,--since <arg> Optional flag to limit the number of threadumps
Defaults to 3 hours. See 'time format'.
-t,--to <arg> Optional flag to limit the number of threadumps.
Defaults to now. See 'time format'.
-x,--extract-config Prints default config in stdout. This option is
used to customize the config, that can be then
specified with the -c option.
-y,--yes Required to acknowledge the utility can have an
impact when used within the container.
Time format: N[s=seconds, m=minutes, h=hours, d=days] OR yyyy-MM-dd HH:mm
OR epoch (e.g. 1650375222829) OR yyyyMMdd.HHmm[ss]
Available reports:
- Top Web Frames (tw): Reports the stacks most frequently found in threads
- Base Web Activity (ba): Summary of total base activities
- Web Activity (wa): Lists the discovered activity for each tread
-Xmx
para limitar el uso de memoria.Lógica de actividad de ThreadAnalyzer
La herramienta ThreadAnalyzer genera informes como "Actividad web base" y "Actividad web " que se basan en la lógica para "descubrir" actividades clave de una pila. La configuración se basa generalmente en aplicar patrones RegEx a marcos de pila y buscar determinadas clases y métodos conocidos.
El ejemplo siguiente adjunta la actividad DB2
a una pila con marcos que incluyen el paquete com.ibm.db2.jcc
:
- activity: DB2
startsWith: com.ibm.db2.jcc
consumePrevious: true
La configuración predeterminada se puede revisar y ampliar.
- Utilice el argumento
-x
para imprimir la configuración predeterminada en la pantalla. La salida YAML se puede redirigir a un archivo para editarla:java -jar thread-analyzer.jar -x -y
- La configuración personalizada se puede aplicar utilizando el argumento
-c
:java -jar thread-analyzer.jar -c custom_config.yaml
Informes de ThreadAnalyzer
Informe de actividad web base
El informe "Actividad web base" resume la actividad para cada papelera de subprocesos o Javacore. Incluye la hora de la papelera, el nombre de archivo, el número total de hebras no desocupadas y las actividades base encontradas. Este informe es útil para obtener una perspectiva de alto nivel de áreas problemáticas e identificar los periodos de tiempo, que normalmente muestran las hebras más ocupadas.
2021/10/26 13:10:12 - threaddump.20211026.131012.2913.0007.txt: 3 - SocketRead[DB2]:3
2021/10/26 13:10:42 - threaddump.20211026.131042.2913.0009.txt: 10 - SocketRead[DB2]:10
2021/10/26 13:11:12 - threaddump.20211026.131112.2913.0011.txt: 12 - SocketRead[DB2]:7 CMD(RetrieveCatalogEntryTask):3 DB2[DBQuery]:1 CMD(CheckCatalogEntryEntitlementBySearch):1
2021/10/26 13:11:27 - threaddump.20211026.131127.2913.0012.txt: 15 - CMD(RetrieveCatalogEntryTask):5 CMD(RetrieveContentTask):4 Web:4 CMD(InsertMoreMarketingContentAttachmentReferenceData):2
2021/10/26 13:11:42 - threaddump.20211026.131142.2913.0013.txt: 5 - Web:2 Commit:1 CMD(RetrieveContentTask):1 SocketRead[DB2]:1
2021/10/26 13:12:12 - threaddump.20211026.131212.2913.0015.txt: 2 - DB2[DBQuery]:3
2021/10/26 13:13:27 - threaddump.20211026.131327.2913.0020.txt: 2 - Web:1 SocketRead[DB2]:1
2021/10/26 13:13:42 - threaddump.20211026.131342.2913.0021.txt: 1 - SocketRead[DB2]:1
2021/10/26 13:14:12 - threaddump.20211026.131412.2913.0023.txt: 1 - CMD(RetrieveCatalogEntryTask):1
Informe de actividad Web
2021/10/26 13:11:12 - threaddump.20211026.131112.2913.0011.txt:
WebContainer : 0 RUNNABLE [SocketRead[DB2], DBUpdate, Web]
WebContainer : 3 RUNNABLE [SocketRead[DB2], DBUpdate, Web]
WebContainer : 9 RUNNABLE [CMD(RetrieveCatalogEntryTask), CMD(FilterCatalogEntryTask), Web]
WebContainer : 10 RUNNABLE [SocketRead[DB2], DBUpdate, Web]
WebContainer : 11 RUNNABLE [SocketRead[DB2], DBQuery, CMD(RetrieveContentTask), CMD(FilterContentTask), Web]
WebContainer : 13 RUNNABLE [SocketRead[DB2], DBUpdate, Web]
WebContainer : 16 RUNNABLE [CMD(RetrieveCatalogEntryTask), CMD(FilterCatalogEntryTask), Web]
WebContainer : 18 RUNNABLE [DB2[DBQuery], CMD(RetrieveContentTask), CMD(FilterContentTask), Web]
WebContainer : 19 RUNNABLE [CMD(RetrieveCatalogEntryTask), CMD(FilterCatalogEntryTask), Web]
WebContainer : 20 RUNNABLE [SocketRead[DB2], DBQuery, CMD(RetrieveContentTask), CMD(FilterContentTask), Web]
WebContainer : 21 RUNNABLE [SocketRead[DB2], DBQuery, CMD(RetrieveCatalogEntryTask), CMD(FilterCatalogEntryTask), Web]
WebContainer : 22 RUNNABLE [CMD(CheckCatalogEntryEntitlementBySearch), CMD(CatalogFilterGetContractUnitPrice), CMD(ComposePriceForCatalogEntry), CMD(RetrieveCatalogEntryTask), CMD(FilterCatalogEntryTask), Web]
Informe de marcos web principales
El informe "Marcos web principales" lista los marcos de pila más frecuentes para todos los volcados encontrados.
87 threaddumps, 98 total threads analyzed
278 (284%) com.ibm.websphere.command.CacheableCommandImpl.execute(CacheableCommandImpl.java:167)
244 (249%) com.ibm.commerce.command.MeasuredCacheableCommandImpl.execute(MeasuredCacheableCommandImpl.java:69)
228 (233%) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
128 (131%) com.ibm.commerce.foundation.client.facade.bod.AbstractBusinessObjectDocumentFacadeClient.internalSendBusinessObjectDocument(AbstractBusinessObjectDocumentFacadeClient.java:818)
128 (131%) com.ibm.commerce.foundation.internal.client.services.invocation.InvocationService.invoke(InvocationService.java:113)
128 (131%) com.ibm.commerce.foundation.internal.client.services.invocation.impl.NoInterfaceEJBInvocationBindingImpl.invoke(NoInterfaceEJBInvocationBindingImpl.java:225)
128 (131%) com.ibm.commerce.foundation.client.facade.bod.AbstractBusinessObjectDocumentFacadeClient.sendBusinessObjectDocument(AbstractBusinessObjectDocumentFacadeClient.java:529)
125 (128%) com.ibm.commerce.foundation.server.command.bod.BusinessObjectCommandTargetImpl.executeCommand(BusinessObjectCommandTargetImpl.java:116)
125 (128%) com.ibm.commerce.foundation.server.command.bod.BusinessObjectDocumentProcessor.processBusinessObjectDocument(BusinessObjectDocumentProcessor.java:276)
117 (119%) com.ibm.commerce.foundation.internal.server.command.impl.CommandTarget.executeCommand(CommandTarget.java:65)
109 (111%) com.ibm.commerce.foundation.server.command.bod.AbstractGetBusinessObjectDocumentCmdImpl.performExecute(AbstractGetBusinessObjectDocumentCmdImpl.java:158)
96 (98%) com.ibm.commerce.marketing.commands.marketingspot.MarketingSpotCommandBaseTaskCmdImpl.execute(MarketingSpotCommandBaseTaskCmdImpl.java:387)
Porcentajes superiores 100al % significan que la pila se ha encontrado varias veces en una sola hebra.
El informe permite configuraciones (mediante --extract-config y --config) como se indica a continuación:
report:
...
topWebFrames:
minPercentage: 5
excluded:
- com.ibm.ws.
- org.springframework.
- javax.
- java.
- org.apache.wink.
- com.ibm.io.