Título: Debug remoto sobre servidor de aplicaciones Tomcat 6 y 7.
What happends when we can´t install and application in a local tomcat in order to debug some issue o bug?
The answer is easy, remote debug y the key. It allows you to debug the code in the same way like if your web application was installed in your machine.
Note: You have to have installed in your local machine the same code that is in the remote machine to do properly remote debug.
Configuration:
1 - Remote server´s configuration: The remote server have to be setted with params to determine a port (8000 for example) where the server will listen to a remote debug connection.
When you run tomcat you have to pass to virtual machine this params:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
The easy way to do it is to edit the file [tomcat_installation]\bin\setenv.bat and add this lines
set DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
set JAVA_OPTS=%JAVA_OPTS% %DEBUG%
2 - Local configuration (eclipse):
You have to create a Remote Java Application in Debug Configurations:
With the next options, setting a socket with the remote server host and port 8000 .
don´t forget to select the Project where the source code is located.
Happy Debug!!!
Translate
Mostrando entradas con la etiqueta tomcat. Mostrar todas las entradas
Mostrando entradas con la etiqueta tomcat. Mostrar todas las entradas
martes, 1 de julio de 2014
lunes, 1 de julio de 2013
Instalar Tomcat como servicio de Windows 7
Para instalar Apache Tomcat como servicio de windows es tan fácil como:
1 - Descargar la última versión de Apache Tomcat (Yo prefiero en zip nada de instaladores).
2 - Descomprimir/Instalar el archivo descargado.
3 - Abrir una consola (cmd.exe) de commandos con permisos de administrador e ir al directorio de instalación del Tomcat.
5 - Creamos las siguientes variables de entorno con la rutas de instalación de nuestro Tomcat y de la máquina virtual de Java.
Nota: Damos por supuesto que Java está instalado en el siguiente directorio: C:\Program Files\Java\jdk1.7.0_09
CATALINA_HOME: "C:\apache-tomcat-7.0.33-src-A"
JAVA_HOME: "C:\Program Files\Java\jdk1.7.0_09"
6 - Entrar en el directorio bin y ejecutar el comando: service install Tomcat7
Tomcat 7 es el nombre que le daremos al servicio y es importante porque es el que nos servirá para arrancarlo.
Podemos eliminarlo con:
service remove Tomcat7
7 - Comprobar que el servicio se ha instalado correctamente entrando en las herramientas administrativas servicios
Y ya podemos arrancarlo y pararlo desde los servicios o desde linea de comando con las instrucciones
net start Tomcat7
net stop Tomcat7
Arrancar el servicio de tomcat desde linea de comando nos permitirá entre otras cosa arrancarlo fácilmente desde un script de ant.
Problemas conocidos:
1 - Problemas con la instalación del servicio:
Failed installing 'Tomcat7' service
Solución:
Este problema se produce principalmente porque no tenemos permisos desde la consola para instalar servicios, debemos de asegurarnos que tenemos permisos de administrador.
2 - Problema la arrancar el servicio:
Al arrancar el servicio desde la ventana de Herramientas del sistema - Servicios recibimos el siguiente mensaje:
O desde la consola de comando:
Error específico del servicio: 0.
Si vemos la consola de tomcat que está en el directorio /logs concretamente en el archivo comons-daemon2013-07-01.log veremos el siguiente error:
[2013-07-01 13:33:25] [info] Starting service...
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [error] Failed creating java C:\Program Files\Java\jdk1.7.0_09\jre\bin\server\jvm.dll
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [error] ServiceStart returned 1
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [info] Run service finished.
[2013-07-01 13:33:25] [info] Commons Daemon procrun finished
Solución1: El problema se soluciona editando el script service.bat que se encaga de la instalación del servicio que está en el directorio /bin. Hacemos una copia de seguridad por si acaso del archivo y lo abrimos y buscamos todas las apariciones de "server\jvm.dll" y la cambiamos por "client\jvm.dll".
Guardamos y reinstalamos el servicio de nuevo y veremos como arranca perfectamente.
Solución2: Vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
Y cambiamos la ruta para que utilice el client\jvm.dll
3 - Problema con la versión de java con la que se arranca el servicio
Al arrancar el servicio y desplegar alguna de las aplicaciones puede que nos de el siguiente error:
Este problema se produce porque al crearse el servicio se ha creado utilizando una JRE de una versión más baja que la que ha compilado las clases de la aplicación.
Solución:
En mi caso yo tengo compilada mi aplicación con una JDK1.70_02 y para comprobar como se ha creado el servicio vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
Como vemos en la imagen el tomcat se está arrancando con un JRE6 lo modificamos poniendo la jvm.dll correcta de nuestra jdk en mi caso .....\Java\jdk1.7.0_02\jre\bin\client\jvm.dll
Simplemente cambiándolo arrancará sin problemas de versiones.
4 - Problemas de Memoria al arrancar el servicio
Al desplegar una aplicación lo más normal es que tengamos el siguiente problema de memoria y necesitemos retocar los parámetros memoria del servicio.
Si vemos la guía de Apache tomcat de como instalat tomcat como servicio de Windows, vemos que en la creación del servicio se pueden definir los parámetros y variables del entorno en que se ejecutará el servicio.
Nota Importante: Es importante saber que al arrancar tomcat desde los servicios las variables de entorno no sirven para nada, todo tiene que estar configurado dentro de el servicio.
Solución: Vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
y vemos que por defecto ya tenemos unos parámetros de memoria añadidos Initial Memory Pool y Maximum Memory Pool,
Para arrancar un par de aplicaciones desde linea de commandos en tomcat yo pongo estos parámetros en el script de arrranque:
set CATALINA_HOME=C:\apache-tomcat-7.0.33-src-A
set JAVA_HOME=D:\antuan\Java\jdk1.7.0_02
set JAVA_OPTS=-Xms800m -Xmx800m -XX:MaxPermSize=256m
Eso valores de Xms y Xmx se corresponden con Initial Memory Pool y Maximum Memory Pool y podemos modificarlos directamente sin problemas pero que pasa con MaxPermSize.
Para definir este valor devemos ponerlo dentro de las JavaOptions
-XX:MaxPermSize=256m
Referencias:
Tomcat Error – Prunsrv.C Failed Creating Java (Jvm.Dll)
Windows-service-HowTo
Tomcat Service On Windows
1 - Descargar la última versión de Apache Tomcat (Yo prefiero en zip nada de instaladores).
2 - Descomprimir/Instalar el archivo descargado.
3 - Abrir una consola (cmd.exe) de commandos con permisos de administrador e ir al directorio de instalación del Tomcat.
5 - Creamos las siguientes variables de entorno con la rutas de instalación de nuestro Tomcat y de la máquina virtual de Java.
Nota: Damos por supuesto que Java está instalado en el siguiente directorio: C:\Program Files\Java\jdk1.7.0_09
CATALINA_HOME: "C:\apache-tomcat-7.0.33-src-A"
JAVA_HOME: "C:\Program Files\Java\jdk1.7.0_09"
6 - Entrar en el directorio bin y ejecutar el comando: service install Tomcat7
Tomcat 7 es el nombre que le daremos al servicio y es importante porque es el que nos servirá para arrancarlo.
Podemos eliminarlo con:
service remove Tomcat7
7 - Comprobar que el servicio se ha instalado correctamente entrando en las herramientas administrativas servicios
Y ya podemos arrancarlo y pararlo desde los servicios o desde linea de comando con las instrucciones
net start Tomcat7
net stop Tomcat7
Arrancar el servicio de tomcat desde linea de comando nos permitirá entre otras cosa arrancarlo fácilmente desde un script de ant.
Problemas conocidos:
1 - Problemas con la instalación del servicio:
Failed installing 'Tomcat7' service
Solución:
Este problema se produce principalmente porque no tenemos permisos desde la consola para instalar servicios, debemos de asegurarnos que tenemos permisos de administrador.
2 - Problema la arrancar el servicio:
Al arrancar el servicio desde la ventana de Herramientas del sistema - Servicios recibimos el siguiente mensaje:
O desde la consola de comando:
Error específico del servicio: 0.
Si vemos la consola de tomcat que está en el directorio /logs concretamente en el archivo comons-daemon2013-07-01.log veremos el siguiente error:
[2013-07-01 13:33:25] [info] Starting service...
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [error] Failed creating java C:\Program Files\Java\jdk1.7.0_09\jre\bin\server\jvm.dll
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [error] ServiceStart returned 1
[2013-07-01 13:33:25] [error] %1 no es una aplicación Win32 válida.
[2013-07-01 13:33:25] [info] Run service finished.
[2013-07-01 13:33:25] [info] Commons Daemon procrun finished
Solución1: El problema se soluciona editando el script service.bat que se encaga de la instalación del servicio que está en el directorio /bin. Hacemos una copia de seguridad por si acaso del archivo y lo abrimos y buscamos todas las apariciones de "server\jvm.dll" y la cambiamos por "client\jvm.dll".
Guardamos y reinstalamos el servicio de nuevo y veremos como arranca perfectamente.
Solución2: Vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
Y cambiamos la ruta para que utilice el client\jvm.dll
3 - Problema con la versión de java con la que se arranca el servicio
Al arrancar el servicio y desplegar alguna de las aplicaciones puede que nos de el siguiente error:
ADVERTENCIA: Unable to load class [xxx.xxx.xxx.xxx.MainDashboardController] to check against the @HandlesTypes annotation of one or more ServletContentInitializers. java.lang.UnsupportedClassVersionError: com/xxxx/xxxx/xxx/MainDashboardController: Unsupported major.minor version 51.0 (no puedo cargar clase com.gniux.dashboard.mvc.MainDashboardController) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2822) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1956) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1919)
Este problema se produce porque al crearse el servicio se ha creado utilizando una JRE de una versión más baja que la que ha compilado las clases de la aplicación.
Solución:
En mi caso yo tengo compilada mi aplicación con una JDK1.70_02 y para comprobar como se ha creado el servicio vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
Como vemos en la imagen el tomcat se está arrancando con un JRE6 lo modificamos poniendo la jvm.dll correcta de nuestra jdk en mi caso .....\Java\jdk1.7.0_02\jre\bin\client\jvm.dll
Simplemente cambiándolo arrancará sin problemas de versiones.
4 - Problemas de Memoria al arrancar el servicio
Al desplegar una aplicación lo más normal es que tengamos el siguiente problema de memoria y necesitemos retocar los parámetros memoria del servicio.
Información: Despliegue del archivo MyWeb.war de la aplicación web
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1956)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1919)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1806)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1765)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1751)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1255)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:882)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5081)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:379)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:324)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
Exception in thread "Thread-1" java.lang.OutOfMemoryError: PermGen space
at java.util.WeakHashMap$Values.iterator(WeakHashMap.java:897)
at org.apache.juli.ClassLoaderLogManager.shutdown(ClassLoaderLogManager.java:324)
at org.apache.juli.ClassLoaderLogManager$Cleaner.run(ClassLoaderLogManager.java:54)
Si vemos la guía de Apache tomcat de como instalat tomcat como servicio de Windows, vemos que en la creación del servicio se pueden definir los parámetros y variables del entorno en que se ejecutará el servicio.
Nota Importante: Es importante saber que al arrancar tomcat desde los servicios las variables de entorno no sirven para nada, todo tiene que estar configurado dentro de el servicio.
Solución: Vamos al directorio bin de la instalación de nuestro tomcat y ejecutamos el archivo tomcat7w.exe que nos permite retocar el servicio que hemos creado a través del script.
y vemos que por defecto ya tenemos unos parámetros de memoria añadidos Initial Memory Pool y Maximum Memory Pool,
Para arrancar un par de aplicaciones desde linea de commandos en tomcat yo pongo estos parámetros en el script de arrranque:
set CATALINA_HOME=C:\apache-tomcat-7.0.33-src-A
set JAVA_HOME=D:\antuan\Java\jdk1.7.0_02
set JAVA_OPTS=-Xms800m -Xmx800m -XX:MaxPermSize=256m
Eso valores de Xms y Xmx se corresponden con Initial Memory Pool y Maximum Memory Pool y podemos modificarlos directamente sin problemas pero que pasa con MaxPermSize.
Para definir este valor devemos ponerlo dentro de las JavaOptions
-XX:MaxPermSize=256m
Aquí debes ajustar tus parámetros de memoria dependiendo de tu aplicación/es y arrancará correctamente.
Referencias:
Tomcat Error – Prunsrv.C Failed Creating Java (Jvm.Dll)
Windows-service-HowTo
Tomcat Service On Windows
jueves, 8 de noviembre de 2012
Tomcat: Arrancar Tomcat con parámetros
Una vez visto como se arranca el tomcat desde linea de comandos en la misma ventana de comandos de windows en unos de los artículos anteriores.
Ahora vamos ver como añadir parámetros desde la línes de comandos de tomcat, para hacerlo utilizamos lo que tenemos añadir es la variable de entorno JAVA_OPTS y podemos añadir todos los parámetros que necesitemos.
Ahora vamos ver como añadir parámetros desde la línes de comandos de tomcat, para hacerlo utilizamos lo que tenemos añadir es la variable de entorno JAVA_OPTS y podemos añadir todos los parámetros que necesitemos.
set JAVA_HOME=D:\Java\jdk1.7.0_02 set JAVA_OPTS=-Xms800m -Xmx800m -XX:MaxPermSize=256m catalina run
miércoles, 10 de octubre de 2012
Tomcat: Arrancar tomcat en la misma ventana de comandos en Windows
Start tomcat in the same command window
Cuando intentamos configurar rápidamente un tomcat 6 o 7 el primer problema que con encuentro es que al lazar el comando startup o catalina start todas las trazas e información me aparecen en una ventana de comandos nueva.
Eso no estaría nada mal si esa ventana no se cerrara al terminar la ejecución o cuando ocurre un problema en el arranque inicial del tomcat.
Para que todo arranque dentro de la misma ventana de comandos debemos de arrancar tomcat con la siguiente línea de comandos:
catalina run
Para que todo arranque dentro de la misma ventana de comandos debemos de arrancar tomcat con la siguiente línea de comandos:
catalina run
viernes, 2 de marzo de 2012
Error Tomcat 7 al iniciar: VerifyError: Cannot inherit from final class
Estaba configurando unos de nuestros proyectos con MAVEN y estaba poniendo en le archivo POM todos los JARS que tenía que en la carpeta WEB-INF\lib.
Una vez que termino el proceso arranco el servidor para ver si todo está en orden y me encuentro que aparece el siguiente error que es tan poco descriptivo:
El problema era que he puesto una versión más vieja de un JAR, concretamente spring-data-commons-core-1.1.0.RELEASE, y tendría que ser spring-data-commons-core-1.2.0.RELEASE
Este jar antiguo en combinación con otros y la configuración de Spring ha hecho que Tomcat no sea capaz de arrancar.
Así que si te ocurre este error yo revisaría las librerías jar que tiene tu proyecto.
Una vez que termino el proceso arranco el servidor para ver si todo está en orden y me encuentro que aparece el siguiente error que es tan poco descriptivo:
Información: Starting Servlet Engine: Apache Tomcat/7.0.14 java.lang.VerifyError: Cannot inherit from final class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1969) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1932) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1826) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1785) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1771) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1254) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:316) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.startup.Catalina.start(Catalina.java:620) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)Después de googlear un poco veo que el problema puede residir en los JAR que estaba poniendo en el proyecto y voy quitando uno a uno hasta que el entorno arranca correctamente y detecto cual era el problema.
El problema era que he puesto una versión más vieja de un JAR, concretamente spring-data-commons-core-1.1.0.RELEASE, y tendría que ser spring-data-commons-core-1.2.0.RELEASE
Este jar antiguo en combinación con otros y la configuración de Spring ha hecho que Tomcat no sea capaz de arrancar.
Así que si te ocurre este error yo revisaría las librerías jar que tiene tu proyecto.
Suscribirse a:
Entradas (Atom)




