He configurado un crontab para ejecutar un servicio Java cada 8 horas en el sistema operativo AIX (7.1). Una vez que el crontab haya hecho el trabajo, el servicio JAVA debería finalizar. Este cronjob está funcionando correctamente. Pero el servicio Java no ha cerrado su sesión al final. Además, este servicio Java tarda entre 3 y 4 horas en procesar los archivos.
Las sesiones de Java se acumulan día a día y, finalmente, esto provoca que el servidor de aplicaciones quede inactivo.
Java Versión 1.8
AIX 7.1
Entrada de crontab:
00 8 * * * cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
Si ejecuto la declaración anterior manualmente, cronjob se ejecuta correctamente y cierra la sesión al final.
Archivo EJECUTAR.sh:
/usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
A continuación se muestran las sesiones de Java que aún se ejecutan en el servidor de aplicaciones. Por favor, eche un vistazo y avise en qué me estoy equivocando.
30932996 7340260 0 Mar 25 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
31129600 29425670 21 Mar 30 - 2953:54 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
32505878 33620190 25 08:00:00 - 216:49 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
32833638 40304674 25 Mar 28 - 4183:00 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
33620190 7340260 0 08:00:00 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
33947736 7340260 0 Apr 04 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
34406468 35389628 22 Apr 03 - 965:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
34471988 7340260 0 Mar 31 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
35389628 7340260 0 Apr 03 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
37290036 34471988 24 Mar 31 - 2444:53 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
38863052 7340260 0 Apr 02 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
39452824 30212288 30 Mar 26 - 5463:39 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
40304674 7340260 0 Mar 28 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
41484458 7340260 0 Apr 01 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
43188280 23003326 27 Mar 22 - 8316:22 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46596146 20512790 29 Mar 27 - 4821:18 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46792934 27132138 26 Mar 24 - 6883:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46923976 30932996 26 Mar 25 - 6177:01 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
Apreciamos mucho su tiempo y esfuerzos en este asunto.
Respuesta1
Primero hice un comentario, pero creo que escribir una respuesta adecuada será más significativo.
Lo primero que comprobaría son los registros: ¿hay algo significativo en run.log
? (y tal vez podría agregarlo a ese archivo en lugar de sobrescribirlo cada vez que se ejecuta el trabajo)
Luego verifique el usuario/grupo bajo el cual se ejecuta el proceso: ¿es diferente cuando se ejecuta desde cron que cuando lo ejecuta usted mismo?
Una técnica muy útil para descubrir dónde está bloqueada una aplicación Java/JVM es hacer unavolcado de hilo- hay varias maneras de hacerlo:
Mi herramienta favorita es
jcmd
: puedes simplemente hacerjcmd <pid> Thread.print > thread.$(date "+%F_%H-%M-%S").dump
Otra forma rápida es enviar señal SIGQUIT:
kill -3 <pid>
- en este caso, el volcado del hilo se imprimirá en la salida estándar del proceso.
Al tener un volcado de subprocesos, puede examinar los subprocesos de la aplicación y ver dónde están atascados.
También puedes intentar strace
capturar las llamadas al sistema realizadas por la aplicación, lo que también puede indicarte qué está haciendo.