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,heap
El nivel de depuración mostrará un resumen de los del montón GC GC para cuando G1 gc,heap,region
el 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,heap
el 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,metaspace
el 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,blocks
el 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,load
, class,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=warning
Y-Xlog::stdout
y-Xlog::::uptime,level,tags
y-Xlog:all=warning:stdout
y-Xlog::stdout:uptime,level,tags
y-Xlog:all=warning:stdout:uptime,level,tags
-Xlog:gc*=info
y-Xlog:gc*=info:stdout:uptime,level,tags
-Xlog::file=/project/log/app.log::filecount=50,filesize=100M
y-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*=info
Etiqueta 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=debug
Indicando 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=debug
Mientras 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=debug
son 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*=info
es 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=100M
Esto 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*=info o-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+region
和gc+heap+region
。
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:
(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。