HCL Commerce Version 9.1.10.0 or later

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
Note: ADVERTENCIA: Cuando se ejecuta dentro del contenedor, esta utilidad usa recursos CPU y de memoria. La cantidad variará en función del número de papeleras procesadas. Para entornos de producción, se recomienda utilizar esta utilidad fuera del contenedor. También es muy recomendable utilizar -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.

Un ejemplo del informe actividad web base es el siguiente:
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

El informe "Actividad web" muestra detalles a nivel de hebra para cada vuelco encontrado, incluido el estado hebra y sus actividades.
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.