Por que esses processos Java não terminam depois que o cronjob é executado no servidor AIX?

Por que esses processos Java não terminam depois que o cronjob é executado no servidor AIX?

Eu configurei um crontab para executar um serviço java a cada 8 horas no sistema operacional AIX (7.1). Assim que o crontab terminar o trabalho, o serviço JAVA deverá ser encerrado. Este cronjob está funcionando corretamente. Mas o serviço java não fecha sua sessão no final. Além disso, este serviço java leva de 3 a 4 horas para processar os arquivos.

As sessões Java estão se acumulando dia a dia e eventualmente levam à inatividade do servidor de aplicativos.

Java Versão 1.8
AIX 7.1

Entrada do Crontab:

00 8 * * * cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log

Se eu executar a instrução acima manualmente, o cronjob será executado corretamente e fechará a sessão no final.

Arquivo RUN.sh:

/usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar 

Abaixo estão as sessões java ainda em execução no servidor de aplicativos. Por favor, dê uma olhada e informe o que estou errado?

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

Agradeço muito seu tempo e esforços para este assunto.

Responder1

Primeiro fiz um comentário, mas acho que escrever uma resposta adequada será mais significativo.

A primeira coisa que eu verificaria são os logs: há algo significativo neles run.log? (e talvez você possa anexar esse arquivo em vez de substituí-lo sempre que o trabalho for executado)

Em seguida, verifique o usuário/grupo sob o qual o processo está sendo executado - é diferente quando ele é executado no cron e quando você mesmo o executa?

Uma técnica muito útil para descobrir onde um aplicativo Java/JVM está travado é fazer umdespejo de thread- existem várias maneiras de fazer isso:

  • minha ferramenta favorita é jcmd- você pode simplesmente fazer

    jcmd <pid> Thread.print > thread.$(date "+%F_%H-%M-%S").dump

  • outra maneira rápida é enviar o sinal SIGQUIT:kill -3 <pid>

    • neste caso, o dump do thread será impresso na saída padrão do processo

Fazendo um dump de thread, você pode examinar os threads do aplicativo e ver onde eles estão presos.

Você também pode tentar stracecapturar chamadas do sistema feitas pelo aplicativo - isso também pode dizer o que ele está fazendo.

informação relacionada