OpenJDK 11 JVM LOGs asociado con el uso de parámetros analíticos

 

navegación de páginas blog personal (haga clic a la derecha de enlace para abrir un blog personal): Daniel lo lleve en la pila de tecnología 

OpenJDK 11 es la versión de soporte primero a largo plazo después de 8 OpenJDK, esta versión de la configuración del registro JVM ha cambiado sustancialmente, principalmente la normalización y la unificación de. En OpenJDK 8, hay una gran cantidad de estado de configuración de registro poco confuso y más difícil de mantener y más iteraciones. Finalmente JVM registra las especificaciones de configuración relacionados arriba en OpenJDK 11, la configuración unificada. En este artículo se hará una descripción básica y el análisis de estas configuraciones.

A, la etiqueta de registro JVM

JVM registra y los registros de nuestro código java, de hecho, es similar. En el código de Java, generalmente utilizamos slf4j registro, por ejemplo:

Logger logger = LogFactory.getLooger("core-logger");
logger.info("this is core logger log");

A continuación, la salida del registro se verá así:

2020-02-05 10:50:52.670  INFO [core-logger] [22] [pool-13-thread-1]: this is core logger log

Incluir una marca de tiempo, el nivel de registro y la ficha de registro (núcleo-logger), el contenido de la información del registro. registros de JVM también incluyen estos elementos. Por ejemplo:

[0.182s][debug][jit,compilation]    1       3       java.lang.StringLatin1::hashCode (42 bytes)
[0.183s][debug][jit,compilation]    2       3       java.lang.Object::<init> (1 bytes)
[0.183s][debug][jit,compilation]    3       3       java.lang.String::hashCode (49 bytes)

Como puede verse, los registros de JVM por defecto incluyen:

[启动经过时间][日志级别][日志标签,可能包含多个] 日志内容

Cuando una fila de registros puede contener múltiples pestañas, después de la configuración pertinente sobre JVM registros también ser configurado alrededor de estas etiquetas. La mayoría de las etiquetas son para los desarrolladores de JVM para usar, algunos de nosotros que utilizan la etiqueta para los parámetros JVM JVM eran tuning y código. Así que tenemos que preocuparse por lo que etiquetarlo? Yo personalmente sigo la función, necesitamos a la atención acerca de las etiquetas se dividen en las siguientes categorías generales

1. gc relacionados

GC registro Hay muchas combinaciones de etiquetas y, la mayoría de etiquetas gc para empezar, mezclados con un número de otras etiquetas. En general, hay varias etiquetas que utilizamos con frecuencia:

etiquetagc

gc descripción general del registro, el conjunto de nivel de información en tiempo gc general de que sucediera, y consume mucho tiempo, así como el tamaño de la memoria. Por ejemplo: Pause Young (Normal) (g1 Evacuation Pause) 3480M->1565M(5120M) 15.968ms que contiene el tipo de GC, GC razones, al tamaño de la memoria a cobro revertido, duración y otros datos

etiquetagc,age

gc en la información relacionada con la edad, la edad relativamente altas objetos en la vieja era. Si el nivel de rastreo, la salida de todos los objetos se ocupan cada una edad total del tamaño y la edad de todos los tamaños más baja que la edad de, el nivel de salida de depuración sólo se puede esperar que los niveles más altos de edad y tamaño, no el tamaño total actual, por ejemplo:

[2020-02-26T08:34:12.823+0000][debug][gc,age         ] gc(1661) Desired survivor size 167772160 bytes, new threshold 6 (max threshold 6)
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   1:   16125960 bytes,   16125960 total
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   2:   16259512 bytes,   32385472 total
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   3:    2435240 bytes,   34820712 total
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   4:   17179320 bytes,   52000032 total
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   5:   43986952 bytes,   95986984 total
[2020-02-26T08:34:12.823+0000][trace][gc,age         ] age   6:   20858328 bytes,  116845312 total

etiqueta gc,alloc,gc,alloc,region

Estos dos parámetros sólo G1 gc eficaces  gc,alloc en GC una vez terminado, hilo de registro de impresión a nivel de trazas que se activa GC y GC resultado de la dirección de retorno, lo que es por lo general cuando el GC única depuración tiene que mirar en el registro. gc,alloc,region La información estadística cada vez GC de las Regiones, registro de nivel de depuración de impresión.

[2020-02-28T02:14:02.694+0000][trace][gc,alloc                    ] sdk-27692-2-amqp-t-4: Successfully scheduled collection returning 0x00000007ffc00000
[2020-02-28T02:16:00.372+0000][debug][gc,alloc,region             ] gc(7848) Mutator Allocation stats, regions: 677, wasted size: 63832B ( 0.0%)

Etiqueta degc,cpu  esto es el registro más gc para localizar el problema que desea ver, imprimir información a nivel de cada gc tiempo real:

[2020-02-28T01:59:46.406+0000][info ][gc,cpu                      ] gc(7841) User=0.10s Sys=0.00s Real=0.04s
[2020-02-28T02:01:20.148+0000][info ][gc,cpu                      ] gc(7842) User=0.04s Sys=0.06s Real=0.04s

Tenga en cuenta que este JFR y las estadísticas pueden variar, las estadísticas gc JFR desde el principio del tiempo se considera que comienza el horario de GC GC, y el tiempo ha llegado para marcar el inicio desde el principio.

Etiqueta gc,ergo, gc,ergo,cset, gc,ergo,ihop,gc,ergo,refine

Se trata de los registros relacionados con las políticas de adaptación de tamaño, si quieres detallada algoritmo de aprendizaje se puede utilizar para niveles de trazas, el nivel general de información de depuración es lo suficientemente

[2020-02-28T01:59:46.367+0000][trace][gc,ergo,cset                ] gc(7841) Start choosing CSet. pending cards: 26996 predicted base time: 13.34ms remaining time: 186.66ms target pause time: 200.00ms
[2020-02-28T01:59:46.367+0000][trace][gc,ergo,cset                ] gc(7841) Add young regions to CSet. eden: 676 regions, survivors: 6 regions, predicted young region time: 19.02ms, target pause time: 200.00ms
[2020-02-28T01:59:46.367+0000][debug][gc,ergo,cset                ] gc(7841) Finish choosing CSet. old: 0 regions, predicted old region time: 0.00ms, time remaining: 167.64
[2020-02-28T01:59:46.389+0000][debug][gc,ergo                     ] gc(7841) Running g1 Clear Card Table Task using 4 workers for 7 units of work for 895 regions.
[2020-02-28T01:59:46.391+0000][debug][gc,ergo                     ] gc(7841) Running g1 Free Collection Set using 4 workers for collection set length 682
[2020-02-28T01:59:46.391+0000][trace][gc,ergo,refine              ] gc(7841) Updating Refinement Zones: update_rs time: 6.800ms, update_rs buffers: 397, update_rs goal time: 19.998ms
[2020-02-28T01:59:46.391+0000][debug][gc,ergo,refine              ] gc(7841) Updated Refinement Zones: green: 572, yellow: 1716, red: 2860
[2020-02-28T02:01:20.108+0000][trace][gc,ergo,cset                ] gc(7842) Start choosing CSet. pending cards: 25786 predicted base time: 12.87ms remaining time: 187.13ms target pause time: 200.00ms
[2020-02-28T02:01:20.108+0000][trace][gc,ergo,cset                ] gc(7842) Add young regions to CSet. eden: 677 regions, survivors: 5 regions, predicted young region time: 14.43ms, target pause time: 200.00ms
[2020-02-28T02:01:20.108+0000][debug][gc,ergo,cset                ] gc(7842) Finish choosing CSet. old: 0 regions, predicted old region time: 0.00ms, time remaining: 172.70
[2020-02-28T02:01:20.132+0000][debug][gc,ergo                     ] gc(7842) Running g1 Clear Card Table Task using 4 workers for 8 units of work for 903 regions.
[2020-02-28T02:01:20.133+0000][debug][gc,ergo                     ] gc(7842) Running g1 Free Collection Set using 4 workers for collection set length 682
[2020-02-28T02:01:20.133+0000][trace][gc,ergo,refine              ] gc(7842) Updating Refinement Zones: update_rs time: 6.303ms, update_rs buffers: 305, update_rs goal time: 19.997ms
[2020-02-28T02:01:20.133+0000][debug][gc,ergo,refine              ] gc(7842) Updated Refinement Zones: green: 572, yellow: 1716, red: 2860
[2020-02-28T02:04:36.095+0000][trace][gc,ergo,cset                ] gc(7843) Start choosing CSet. pending cards: 26115 predicted base time: 12.85ms remaining time: 187.15ms target pause time: 200.00ms
[2020-02-28T02:04:36.095+0000][trace][gc,ergo,cset                ] gc(7843) Add young regions to CSet. eden: 676 regions, survivors: 6 regions, predicted young region time: 69.11ms, target pause time: 200.00ms
[2020-02-28T02:04:36.095+0000][debug][gc,ergo,cset                ] gc(7843) Finish choosing CSet. old: 0 regions, predicted old region time: 0.00ms, time remaining: 118.04
[2020-02-28T02:04:36.118+0000][debug][gc,ergo                     ] gc(7843) Running g1 Clear Card Table Task using 4 workers for 7 units of work for 894 regions.
[2020-02-28T02:04:36.120+0000][debug][gc,ergo                     ] gc(7843) Running g1 Free Collection Set using 4 workers for collection set length 682
[2020-02-28T02:04:36.121+0000][trace][gc,ergo,refine              ] gc(7843) Updating Refinement Zones: update_rs time: 6.929ms, update_rs buffers: 364, update_rs goal time: 19.997ms
[2020-02-28T02:04:36.121+0000][debug][gc,ergo,refine              ] gc(7843) Updated Refinement Zones: green: 572, yellow: 1716, red: 2860

etiqueta gc,heap,gc,heap,region

gc,heapEl nivel de depuración mostrará un resumen de los del montón GC GC para cuando G1  gc,heap,regionel nivel de seguimiento, cada región se imprimirá los detalles, este gc depuración para uso general.

Por lo general, sólo se necesita preocuparse por gc,heapel registro en la línea

Estas etiquetas están en

[2020-02-28T06:01:20.787+0000][debug][gc,heap                     ] gc(7922) Heap before gc invocations=7922 (full 0): garbage-first heap   total 8388608K, used 4076387K [0x0000000600000000, 0x0000000800000000)
[2020-02-28T06:01:20.787+0000][debug][gc,heap                     ] gc(7922)   region size 4096K, 682 young (2793472K), 5 survivors (20480K)
[2020-02-28T06:01:20.787+0000][debug][gc,heap                     ] gc(7922)  Metaspace       used 163068K, capacity 166731K, committed 169728K, reserved 1198080K[2020-02-28T06:01:20.787+0000][debug][gc,heap                     ] gc(7922)   class space    used 18180K, capacity 19580K, committed 20480K, reserved 1048576K
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, A=archive, TAMS=top-at-mark-start (previous, next)[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   0|0x0000000600000000, 0x0000000600400000, 0x0000000600400000|100%| O|  |TAMS 0x0000000600400000, 0x0000000600000000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   1|0x0000000600400000, 0x0000000600800000, 0x0000000600800000|100%| O|  |TAMS 0x0000000600800000, 0x0000000600400000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   2|0x0000000600800000, 0x0000000600c00000, 0x0000000600c00000|100%| O|  |TAMS 0x0000000600c00000, 0x0000000600800000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   3|0x0000000600c00000, 0x0000000601000000, 0x0000000601000000|100%| O|  |TAMS 0x0000000601000000, 0x0000000600c00000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   4|0x0000000601000000, 0x0000000601400000, 0x0000000601400000|100%| O|  |TAMS 0x0000000601400000, 0x0000000601000000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   5|0x0000000601400000, 0x0000000601800000, 0x0000000601800000|100%| O|  |TAMS 0x0000000601800000, 0x0000000601400000| Untracked
[2020-02-28T06:01:20.787+0000][trace][gc,heap,region              ] gc(7922) |   6|0x0000000601800000, 0x0000000601c00000, 0x0000000601c00000|100%| O|  |TAMS 0x0000000601c00000, 0x0000000601800000| Untracked

Etiquetagc,humongous  Si está utilizando GC G1, ya menudo fracaso de evacuación o de asignación de Humongous, y no sabe cuál sea la razón, se puede considerar un vistazo a esta registros relacionados con la etiqueta:

[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 219 object size 2160888 start 0x0000000636c00000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 412 object size 2160888 start 0x0000000667000000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 443 object size 3241320 start 0x000000066ec00000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 489 object size 2160888 start 0x000000067a400000  with remset 2 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 490 object size 2160888 start 0x000000067a800000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 499 object size 7292936 start 0x000000067cc00000  with remset 2 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 536 object size 2160888 start 0x0000000686000000  with remset 2 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 656 object size 2160888 start 0x00000006a4000000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 768 object size 2160888 start 0x00000006c0000000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0
[2020-02-28T06:01:20.831+0000][debug][gc,humongous                ] gc(7922) Live humongous region 786 object size 2160888 start 0x00000006c4800000  with remset 1 code roots 0 is marked 0 reclaim candidate 0 type array 0

Etiqueta gc,metaspace, gc,metaspace,freelist,gc,metaspace,freelist,blocks  registro gc espectador metaespacio relacionada, gc,metaspaceel nivel de salida información cambiará cada metaespacio gc tiempo involucrado en la memoria, si hay un cambio, el cambio será detallado por gc,metaspace,freelist, gc,metaspace,freelist,blocksel nivel de seguimiento de la producción.

[2020-02-28T04:32:13.123+0000][info ][gc,metaspace                ] gc(7896) Metaspace: 163062K->163062K(1198080K)
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] SpaceManager::grow_and_allocate for 49 words 109 words used 19 words left
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] ChunkManager::free_chunks_get: free_list: 0x00007fddccb89770 chunks left: 433.
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] ChunkManager::chunk_freelist_allocate: 0x00007fddccb89770 chunk 0x00007fdc74221000  size 128 count 433 Free chunk total 255616  count 824
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist,blocks] returning block at 0x00007fdd95575b68 size = 19
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] SpaceManager::added chunk: 
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] Metachunk: bottom 0x00007fdc74221000 top 0x00007fdc74221040 end 0x00007fdc74221400 size 128 (specialized)
[2020-02-28T04:35:44.956+0000][trace][gc,metaspace,freelist       ] Free chunk total 255616  count 824
[2020-02-28T04:36:35.367+0000][info ][gc,metaspace                ] gc(7897) Metaspace: 163065K->163065K(1198080K)

Etiqueta gc,phases, gc,phases,ref, gc,phases,task, gc,ref, gc,start,gc,ref,start  estas etiquetas asociado con el paso de GC, si quieres aprender el algoritmo GC, se puede ver un registro de estas etiquetas, para comprender los principios y pasos GC

etiquetasafepoint

Sabemos que sólo punto seguro alcance, podemos estar GC, si podemos ver el nivel de depuración de interés en la etiqueta de estos registros punto seguro

2. tiempo de ejecución de la carga de clases y la compilación relevante

Etiqueta class,preorder, class,init, class,loadclass,unload  como su nombre indica, esta es la clase de inicialización, la carga de clases y descarga del registro de clase, información información de nivel a lo suficiente. Si quieres aprender proceso de carga de clases JVM, puede ver la etiqueta de clase de nivel de registro de seguimiento.

[8.931s][debug][class,preorder  ] com.fasterxml.jackson.core.PrettyPrinter source: file:/D:/Repositories/maven/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar
[8.931s][info][class,init              ] 2740 Initializing 'com/fasterxml/jackson/core/PrettyPrinter' (0x0000000801399220)
[8.934s][info][class,load              ] com.fasterxml.jackson.core.PrettyPrinter source: file:/D:/Repositories/maven/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar

Las etiquetasjit,compilation  son generalmente para nuestra optimización del compilador tiempo, sólo para ver el compilador JIT de registro, la etiqueta correspondiente es jit,compilation, el nivel de registro de depuración es

[2020-02-28T03:01:51.619+0000][debug][jit,compilation] 153756   !   4       jdk.internal.reflect.GeneratedConstructorAccessor161::newInstance (49 bytes)   made zombie
[2020-02-28T03:01:51.620+0000][debug][jit,compilation] 153219       4       io.lettuce.core.protocol.CommandArgs$IntegerArgument::encode (12 bytes)   made zombie
[2020-02-28T03:01:51.623+0000][debug][jit,compilation] 153192       4       io.lettuce.core.protocol.CommandArgs$StringArgument::writeString (60 bytes)   made zombie
[2020-02-28T03:01:54.911+0000][debug][jit,compilation] 157252   !   4       jdk.internal.reflect.GeneratedConstructorAccessor161::newInstance (49 bytes)

3. Otro tiempo de ejecución relevante

Labelmonitorinflation  registros relacionados con el bloqueo de sincronización, visión general nivel de depuración se pueden utilizar para localizar interbloqueo

[5.033s][debug][monitorinflation] Deflating object 0x0000000708310378 , mark 0x0000021cef446002 , type java.lang.ref.ReferenceQueue$Lock
[5.033s][debug][monitorinflation] Inflating object 0x0000000708310378 , mark 0x0000021cf085c002 , type java.lang.ref.ReferenceQueue$Lock
[5.035s][debug][monitorinflation] Deflating object 0x0000000708310378 , mark 0x0000021cf085c002 , type java.lang.ref.ReferenceQueue$Lock
[5.035s][debug][monitorinflation] Inflating object 0x0000000708310378 , mark 0x0000021cef445e02 , type java.lang.ref.ReferenceQueue$Lock

Etiquetabiasedlocking  sesgada de bloqueo de registros relacionados, normalmente se puede ver el nivel de información, visualización de nivel de seguimiento más detallado sesgados detalles de contención de bloqueo, se puede utilizar para poner en práctica los principios de aprendizaje de bloqueo sesgada

[7.273s][info ][biasedlocking] Revoking bias by walking my own stack:
[7.273s][info ][biasedlocking] Revoking bias of object 0x0000000711b1ca40, mark 0x000001c6d0acc905, type sun.net.www.protocol.jar.URLJarFile, prototype header 0x0000000000000105, allow rebias 0, requesting thread 0x000001c6d0acc800
[7.273s][info ][biasedlocking]   Revoked bias of object biased toward live thread (0x000001c6d0acc800)
[7.273s][trace][biasedlocking]    mon_info->owner (0x00000007022634d8) != obj (0x0000000711b1ca40)
[7.273s][trace][biasedlocking]    mon_info->owner (0x0000000711b200d8) != obj (0x0000000711b1ca40)
[7.273s][trace][biasedlocking]    mon_info->owner (0x0000000711b200d8) != obj (0x0000000711b1ca40)
[7.273s][trace][biasedlocking]    mon_info->owner (0x0000000702970260) != obj (0x0000000711b1ca40)
[7.273s][info ][biasedlocking]   Revoked bias of currently-unlocked object

Dos, configuración del registro de JVM

formato de configuración:

-Xlog[:[what][:[output][:[decorators][:output-options[,...]]]]]

Si no se especifica, el valor por defecto es:

-Xlog:all=warning:stdout:uptime,level,tags

Esta es una configuración separados por dos puntos, después de que el colon es la primera what, una segunda output, tercera decorators, cuarta separados por comas output-options. Porción correspondiente de las porciones no está dispuesto encima del valor predeterminado , por ejemplo, la siguiente varios configuración del grupo es equivalente a:

  • -Xlog:all=warningY -Xlog::stdouty -Xlog::::uptime,level,tagsy -Xlog:all=warning:stdouty -Xlog::stdout:uptime,level,tagsy-Xlog:all=warning:stdout:uptime,level,tags
  • -Xlog:gc*=infoy-Xlog:gc*=info:stdout:uptime,level,tags
  • -Xlog::file=/project/log/app.log::filecount=50,filesize=100My-Xlog:all=warning:file=/project/log/app.log:uptime,level,tags:filecount=50,filesize=100M

1. lo

lo etiquetar también incluye el nivel de registro, por ejemplo, puede configurar:

  • -Xlog:gc=info, Se limitó a decir que todos gc registro contiene una etiqueta, el nivel de información se emitirá.
  • -Xlog:gc*=infoEtiqueta con indicación de que contiene todos gc registro, la información de nivel de salida será, que es gc anteriormente en relación con todas las etiquetas .
  • -Xlog:gc+age=debugIndicando al mismo tiempo, incluye sólo el  GC y la edad de estas dos etiquetas, nivel de depuración será de salida.
  • -Xlog:gc*=info,gc+heap=debug,gc+heap+region=debugMientras que configuración incluye sólo el  montón GC y esas dos etiquetas de depurar, incluye sólo el  montón conjunto de GC y la región y tres etiquetas de depurar, el resto del nivel de registro contiene la etiqueta gc para recibir información y porque sólo sé que las etiquetas y las etiquetas de edad con GC, por lo que también se puede escribir:
  • -Xlog:gc*=info,age*=debug Y  -Xlog:gc*=info,gc+age=debugson equivalentes a una etiqueta de este tipo se pueden incorporar, modificar los parámetros para ver cómo el registro se JVM JVM sección de nivel de registro fusionado puede ser modificado dinámicamente por referencia a los siguientes ser.

los niveles de registro incluyen:

  • apagado: Cerrar
  • trace: contiene trazas, depuración, información, advertencia, error registra toda
  • depuración: 包含 depuración, información, advertencia, error
  • Info: contiene información, advertencia, error
  • Advertencia: 包含 advertencia, error
  • Error: sólo contiene errores

** Si no se da el nivel, el valor predeterminado es configurar el nivel de información. ** por ejemplo, -Xlog:gc*y -Xlog:gc*=infoes equivalente a

Si la etiqueta equivocada, sino que terminará con un error:

[0.005s][error][logging] Invalid tag 'phase' in log selection. Did you mean 'phases'?
Invalid -Xlog option '-Xlog:gc+phase=debug', see error log for details.

Si no hay ninguna combinación de una etiqueta de este tipo (o de la etiqueta por sí sola no puede aparecer), la alarma será, pero continúa funcionando:

[0.006s][warning][logging] No tag set matches selection: gc+add. Did you mean any of the following? gc* gc+metaspace* gc+ref* gc+stringtable gc+compaction
[0.007s][warning][logging] No tag set matches selection: phases. Did you mean any of the following? phases* gc+phases* gc+phases+start* gc+phases+task gc+phases+ref

2. salida

Contiene tres salidas:

  • la salida estándar:  salida estándar

  • stderr:  salida de error estándar

  • file = nombre del archivo  de salida a un archivo

Para el archivo de configuración puede ser la salida a salida-Opciones : filecount=50,filesize=100MEsto representa un 50 para retener los archivos, cada 100M

3. decoradores

Puede utilizar la etiqueta:

marca significado
tiempo ot hora actual, formato ISO-8601
UTCTime o UTC hora UTC
el tiempo de actividad o U El tiempo transcurrido para comenzar ahora, con una precisión de milisegundos
timemillis o tm Milisegundos marca de tiempo, lo que equivaleSystem.currentTimeMillis().
uptimemillis o um Comience a la hora de milisegundos ahora
timenanos o tn Nanosegundo marcas de tiempo, lo que equivale aSystem.nanoTime()
uptimenanos o sin tiempo de nanosegundos para iniciar ahora
nombre de host o hn Nombre de host
pid o p ID de proceso
tres veces al día o Ti número de hilo
l nivel o Nivel de registro
etiquetas o tg la etiqueta de registro, la etiqueta de registro de referencia sección mencionaron anteriormente

Supongamos que configurar uptime,level,tags, el registro será así:

[2020-02-26T08:34:12.823+0000][debug][gc,age         ] gc(1661) Desired survivor size 167772160 bytes, new threshold 6 (max threshold 6)

4. La conversión de la versión antigua a la nueva versión de la configuración de registro de configuración de registro

GC relacionadas:

parámetros originales Nuevos parámetros y descripción equivalentes
g1PrintHeapRegions -Xlog: gc + región = traza
gcLogFileSize y NumberOfgcLogFiles no UsegcLogFileRotation Y la salida logra mediante la opción de salida antes mencionado
PrintTenuringDistribution -Xlog: GC + edad * = nivel, en referencia a la GC anteriormente, la etiqueta de edad para determinar el nivel que desea ver
PrintAdaptiveSizePolicy -Xlog: GC + ergo * = nivel, en referencia a la GC anterior, ergo la sección Etiquetas para determinar el nivel de registro que desea ver
Printgc -Xlog: gc = Info o -Xlog: GC, GC imprimir toda registro incluye solamente la etiqueta
PrintgcDetails -Xlog:gc*=infoo-Xlog:gc*
PrintgcApplicationConcurrentTime 和 PrintgcApplicationStoppedTime -Xlog: punto seguro = log o -Xlog: punto seguro, el original se separa, en los nuevos parámetros de registro, las etiquetas son punto seguro
PrintgcTaskTimeStamps -Xlog: gc tarea + * = depuración
PrintHeapAtgc -Xlog: gc + montón = traza
PrintReferencegc -Xlog: GC + ref * = depuración
PrintStringDeduplicationStatistics -Xlog: GC + stringdedup * = depuración
PrintgcDateStamps La configuración actual por la sección decoradores anteriormente, o corresponde al tiempo t
PrintgcCause 和 PrintgcID En este momento hay ID gc gc causa del incumplimiento jugaría a cabo, no configura esto más

Otros parámetros:

parámetros originales Nuevos parámetros y descripción equivalentes
TraceExceptions -Xlog: = excepciones información imprimir cualquier registro de excepciones de error JVM encontró, la impresión por defecto único nivel de error
TraceClassLoadingPreorder -Xlog: Clase + = orden previo de depuración
TraceClassLoading -Xlog: clase + carga = tipo info carga la impresión del Registro, el nivel de información es suficiente
TraceClassUnloading -Xlog:class+unload=info 打印类卸载日志,info 级别就很足够
TraceClassLoadingPreorder -Xlog:class+preorder=debug
TraceClassInitialization -Xlog:class+init=info
TraceClassResolution -Xlog:class+resolve=debug
TraceClassPaths -Xlog:class+path=info
TraceLoaderConstraints -Xlog:class+loader+constraints=info
VerboseVerification -Xlog:verification=info
TraceSafepoint -Xlog:safepoint=debug
TraceSafepointCleanupTime -Xlog:safepoint+cleanup=info
TraceMonitorInflation -Xlog:monitorinflation=debug
TraceBiasedLocking -Xlog:biasedlocking=level 可以参考上面提到的 biasedlocking 标签,根据你想看的信息来配置级别
TraceRedefineClasses -Xlog:redefine+class*=level

三、动态修改JVM日志级别

可以通过 jcmd 动态修改 JVM 日志配置, 主要命令是VM.log, 假设我们的 JVM 进程是22,则可以通过这个命令查看格式:

jcmd 22  VM.log

结果:

22
Syntax : VM.log [options]

Options: (options must be specified using the <key> or <key>=<value> syntax)
        output : [optional] The name or index (#<index>) of output to configure. (STRING, no default value)
        output_options : [optional] Options for the output. (STRING, no default value)
        what : [optional] Configures what tags to log. (STRING, no default value)
        decorators : [optional] Configures which decorators to use. Use 'none' or an empty value to remove all. (STRING, no default value)
        disable : [optional] Turns off all logging and clears the log configuration. (BOOLEAN, no default value)
        list : [optional] Lists current log configuration. (BOOLEAN, no default value)
        rotate : [optional] Rotates all logs. (BOOLEAN, no default value)

查看当前日志参数配置

假设我们22的进程,启动参数中日志相关的参数是这么配置的:

-Xlog:gc*=debug:file=/project/log/gc.log:utctime,level,tags:filecount=50,filesize=100M 
-Xlog:jit+compilation=debug:file=/project/log/jit_compile.log:utctime,level,tags:filecount=10,filesize=100M

执行list命令:

jcmd 22 VM.log list

结果:

22:

Log output configuration:
 #0: stdout all=warning uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/log/gc.log all=off,gc*=debug utctime,level,tags filecount=50,filesize=100M
 #3: file=/project/log/jit_compile.log all=off,jit+compilation=debug utctime,level,tags filecount=10,filesize=100M

里面的#0还有#1是我们之前说的默认JVM日志配置:

 #0: stdout all=warning uptime,level,tags //代表标准输出中输出所有标签的warn级别日志,格式为[uptime][level][tags]日志内容
 #1: stderr all=off uptime,level,tags //代表标准错误输出中,不输出任何日志

我们在启动参数中配置的日志参数对应的是#2#3

让日志另起一个文件输出

jcmd 22 VM.log rotate
22:
Command executed successfully

可以看到#2#3对应的日志都另起一个文件继续输出

关闭所有日志,并清理日志相关参数

jcmd 22 VM.log disable
22:
Command executed successfully
jcmd 22 VM.log list
22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags

可以看出,执行这个命令后,所有的日志都被关闭,并且参数被清理掉了(连启动参数配置的日志参数都不例外)

新增日志配置输出

以下参数和我们启动参数的-Xlog:gc*=debug:file=/project/log/gc.log:utctime,level,tags:filecount=50,filesize=100M保持一致。

jcmd 22 VM.log output=/project/core/log/gc.log output_options="filecount=50,filesize=100M" decorators="utctime,level,tags" what="gc*=debug"

结果:

22:
Command executed successfully

jcmd 22 VM.log list

22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=debug utctime,level,tags filecount=50,filesize=100M (reconfigured)

由于之前配置过一次所以这里有(reconfigured)

修改日志配置输出

怎么区分日志呢?是通过 output 来唯一区分的(不指定就是stdout)。保持与现有的某个output一致,就是修改配置,但是 output_options 只要设定了,就不能改,只能通过 disable 关闭所有日志之后重新设置。

例如我们来修改刚刚的配置级别为info:

jcmd 22 VM.log output=/project/core/log/gc.log what="gc*=info"

结果:

22:
Command executed successfully

jcmd 22 VM.log list
22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=info uptime,level,tags filecount=50,filesize=100M (reconfigured)

其中,标签为包含关系的会自动合并,每次设置是增量设置,而不是全量设置也就是每次配置的what会附加到现有的输出当中,从下面几个例子就能看出来

jcmd 22 VM.log output=/project/core/log/gc.log what="gc+age=info"

22:
Command executed successfully

jcmd 22 VM.log list

22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=info uptime,level,tags filecount=50,filesize=100M (reconfigured)

由于gc+age其实属于gc*,所以被合并到了gc*

jcmd 22 VM.log output=/project/core/log/gc.log what="gc+age=debug"

22:
Command executed successfully

jcmd 22 VM.log list

22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=info,age*=debug uptime,level,tags filecount=50,filesize=100M (reconfigured)
 

gc+age设置为 debug 级别,合并变成了gc*=info,age*=debug,可以推测出,age 只能和 gc 搭配使用

jcmd 22 VM.log output=/project/core/log/gc.log what="gc+alloc+region=debug"

22:
Command executed successfully

jcmd 22 VM.log list

22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=info,age*=debug,alloc+region*=debug uptime,level,tags filecount=50,filesize=100M (reconfigured)
 
jcmd 22 VM.log output=/project/core/log/gc.log what="gc+heap=debug,gc+heap+region=debug"

22:

Command executed successfully

jcmd 22 VM.log list

22:

Log output configuration:
 #0: stdout all=off uptime,level,tags
 #1: stderr all=off uptime,level,tags
 #2: file=/project/core/log/gc.log all=off,gc*=info,age*=debug,region*=debug,gc+heap=debug,gc+region=info uptime,level,tags filecount=50,filesize=100M (reconfigured)

gc+alloc+region设置为 debug ,合并变成了gc*=info,age*=debug;再加上gc+heap=debug,gc+heap+region=debug,合并变成了gc*=info,age*=debug,region*=debug,gc+heap=debug,gc+region=info,可以看出,region 只有两种搭配gc+alloc+regiongc+heap+region

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

发布了141 篇原创文章 · 获赞 17 · 访问量 8159

Supongo que te gusta

Origin blog.csdn.net/JKX_geek/article/details/104891119
Recomendado
Clasificación