¿Por qué estos procesos de Java no finalizan una vez que se ejecuta cronjob en el servidor AIX?

¿Por qué estos procesos de Java no finalizan una vez que se ejecuta cronjob en el servidor AIX?

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 hacer

    jcmd <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 stracecapturar las llamadas al sistema realizadas por la aplicación, lo que también puede indicarte qué está haciendo.

información relacionada