2012-06-01 21 views
10

mi situaciónJava y Tomcat - CodeCache está lleno. Compilador ha sido desactivado

  • he desarrollado un servicio web para el análisis de documentos
  • Este servicio Web lee txt y pdf documentos
  • para leer archivos PDF estoy usando una biblioteca de Java desarrollado por mi asesor universitario
  • estoy usando Java 7
  • Actualmente estoy desplegarlo en Tomcat v7.0
  • Si genero un archivo de la guerra de mi solicitud y alojarlo en un gato local en mi PC, o si comienzo mi aplicación en Tomcat a través ee eclipse, la lectura de un archivo pdf hace ningún problema

Mi problema

  • he levantado un poco de mi servidor (no el mejor hardware, CPU de doble núcleo, memoria rAM 4g), Tomcat instalado, java y el resto que parecía necesario para mí.
  • Cuando despliegue un archivo war en los servidores tomcat utilizando el administrador tomcat todo funciona bien hasta que intento que la aplicación lea un archivo pdf.
  • Después de que la aplicación ha leído varias páginas, aparece un error que indica que CodeCache se ha llenado y la compilación se ha desactivado debido a esto.

salida de error Ejemplo durante una importación pdf

Este registro muestra cómo se importa el PDF y en somepoint los mensajes de error de inicio. He marcado el mensaje de error gordo.

...

31 de de mayo de, 2012 11:15:40 AM proceso infovis.structure.pdf.PDFImport INFORMACIÓN: Procesamiento Página 13

31 de de mayo de, 2012 11:15:40 AM infovis .structure.pdf.PDFImport proceso INFO: Tratamiento Página 14

31 de de mayo de, 2012 11:15:41 AM proceso infovis.structure.pdf.PDFImport INFORMACIÓN: Procesamiento Página 15

Java HotSpot (TM) 64 -Bit Server VM warning: CodeCach e está lleno. El compilador ha sido deshabilitado. Advertencia de Java VM HotSpot (TM) 64-Bit Server: intente aumentar el tamaño de caché de código utilizando -XX: ReservedCodeCacheSize = Caché de código [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs = 1858 nmethods = 1318 adaptaters = 490 free_code_cache = 44631Kb largest_free_block = 45618688 Java HotSpot (TM) Advertencia de VM de servidor de 64 bits: CodeCache está lleno. El compilador ha sido deshabilitado. Java HotSpot (TM) VM advertencia servidor de 64 bits: Intente aumentar el tamaño de caché de código usando -XX: ReservedCodeCacheSize = Código Caché [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs = 1859 = 1318 nmethods adaptadores = 490 = free_code_cache 44631Kb largest_free_block = 45618688

de mayo de 31 de, 2012 11:16:19 AM proceso infovis.structure.pdf.PDFImport INFORMACIÓN: Procesamiento Página 16

31 de de mayo de, 2012 11:16:20 AM infovis.structure.pdf.PDFImport process INFO: Procesamiento Página 17

Java HotSpot (TM) 64-Bit Server VM advertencia: CodeCache está lleno. El compilador ha sido deshabilitado. Advertencia de Java VM HotSpot (TM) 64 bits del servidor: intente aumentar el tamaño del caché del código usando -XX: ReservedCodeCacheSize = Caché del código [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs = 1860 nmethods = 1318 adaptaters = 490 free_code_cache = 44630Kb biggest_free_block = 45618688 Mayo 31, 2012 11:17:07 AM infovis.structure.pdf.PDFImport process INFORMACIÓN: Procesamiento Page 18 Java HotSpot (TM) Servidor de 64 bits Advertencia de VM: CodeCache está lleno. El compilador ha sido deshabilitado. Java HotSpot (TM) VM advertencia servidor de 64 bits: Intente aumentar el tamaño de caché de código usando -XX: ReservedCodeCacheSize = Código Caché [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs = 1861 = 1318 nmethods adaptadores = 490 = free_code_cache 44633Kb largest_free_block = 45618688

y así sucesivamente ...

lo que he intentado hasta ahora

he intentado cambiar los tamaños de caché en la configuración de Tomcat en mi servidor (no soy el mejor en el trabajo con el shell de Linux). He intentado aumentar el tamaño de CodeCache, así como el tamaño de las otras cachés, pero el problema aún se produce. Revisé mi código para detectar posibles fugas pero aún no encontré ninguno (Recuerde, si lo inicio a través de eclipse no recibo este mensaje, entonces esto podría indicar un problema de configuración de tomcat (?)). También he intentado configurar el parámetro "UseCodeCacheFlushing" que debería enfocar para vaciar el códec cuando se está llenando, pero de alguna manera no afecta el desglose de las aplicaciones.

Mi configuración del servidor Tomcat

He leído que el tamaño predeterminado es CodeCache 32MB o 64MB cuando se trata de una aplicación de 64 bits. Intenté reservar 512mb (¿tal vez hice algo mal en la configuración?) Pero el problema, por supuesto, volvió a suceder.

Puede pasar los parámetros de inicio de JVM a Java aquí. Si no se configura, los opciones por defecto serán: -Djava.awt.headless = true Xmx128m -XX: + UseConcMarkSweepGC

Uso "-XX: + UseConcMarkSweepGC" para habilitar el recolector de basura CMS (tiempo de respuesta mejorado) . Si utiliza esa opción y ejecuta Tomcat en una máquina con exactamente un chip de CPU que contiene uno o dos núcleos, , también debe agregar la opción "-XX: + CMSIncrementalMode". JAVA_OPTS = "- Djava.awt.headless = true -Xmx3g -Xms2g -XX: + UseCodeCacheFlushing -XX: + UseG1GC -XX: MaxPermSize = 512m -XX: ReservedCodeCacheSize = 512M"

Mis Pensamientos en este

Durante mi investigación, he encontrado algunas notas que los problemas relacionados CodeCache puede indicar problemas de pérdida de memoria, cuando se produce un fallo de programación, en el que el resultado es que el recolector de basura no puede vaciar la caché. Esto podría ser posible y lamentablemente no tengo el código fuente de la biblioteca en la que leo el pdf. Pero, por otro lado, no tengo problemas para leer un PDF de 650 páginas en mi PC de escritorio en un tomcat local (quadcore, 4x 3.0ghz, también 4g ram) y esto me confunde.

Podría ser que esto es sólo un problema Tomcat que pueden quedar resuelto si uso otro servidor para el despliegue, como GlassFish?

Puede alguien de ustedes me ayude o tiene alguna idea o sugerencia? Tal vez hice alguna configuración mal? No tengo tanta experiencia en trabajar con tomcat u otros servidores, por lo que cualquier ayuda es realmente bienvenida.

Gracias mucho por cada respuesta y pensaron que estás compartiendo conmigo.

+0

parece un problema con java 7. Ver http://www.minecraftforum.net/topic/1250581-minecraft-crashes-after-java-7/ – sudmong

+0

Gracias por su comentario. ¿Pero publicaste el enlace correcto? ¿Dónde está la información que relaciona su enlace publicado con mi pregunta? – Waylander

Respuesta

0

La solución para mí fue cambiar de Tomcat a Glassfish como servidor de aplicaciones para implementar mi aplicación.

Después de que el interruptor Nunca reexperimentado este comportamiento CodeCache.

Para asegurarme de que se soluciona este problema, también observé que java-vm se está ejecutando en mi servidor (usando jconsole con control remoto). Ya no veo ningún comportamiento sospechoso.

0

Prueba otro JVM como JRockit en el que no debería tener este problema. Si se trata de Tomcat, intente ver si registra algo sobre las filtraciones en sus registros, generalmente lo hace para los problemas del cargador de clases.

Cuestiones relacionadas