Почему эти процессы Java не завершаются после выполнения cronjob на сервере AIX?

Почему эти процессы Java не завершаются после выполнения cronjob на сервере AIX?

Я установил crontab для выполнения службы java каждые 8 ​​часов в операционной системе AIX(7.1). После того, как crontab выполнит свою работу, служба JAVA должна завершиться. Эта cronjob работает правильно. Но служба java не закрывает свой сеанс в конце. Кроме того, эта служба java обрабатывает файлы 3-4 часа.

Сеансы Java накапливаются с каждым днем, и в конечном итоге это приводит к простою сервера приложений.

Java версии 1.8
AIX 7.1

Запись в Crontab:

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

Если я выполню указанный выше оператор вручную, cronjob запустится должным образом и закроет сеанс в конце.

Файл RUN.sh:

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

Ниже приведены сеансы Java, которые все еще работают на сервере приложений. Пожалуйста, посмотрите и посоветуйте, что я делаю не так?

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

Мы высоко ценим ваше время и усилия, потраченные на это дело.

решение1

Я сначала оставил комментарий, но думаю, что написать правильный ответ будет более содержательно.

Первое, что я бы проверил, это логи: есть ли в них что-нибудь значимое run.log? (И, возможно, вы могли бы дополнять этот файл, а не перезаписывать его каждый раз при запуске задания)

Затем проверьте пользователя/группу, под которыми запущен процесс — отличается ли он при запуске из cron от того, когда вы запускаете его самостоятельно?

Очень полезный метод определения места, где зависло приложение Java/JVM, — это созданиедамп потока- есть несколько способов сделать это:

  • Мой любимый инструмент jcmd- вы можете просто сделать

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

  • Еще один быстрый способ — отправить сигнал SIGQUIT:kill -3 <pid>

    • в этом случае дамп потока будет выведен на стандартный вывод процесса

Имея дамп потока, вы можете изучить потоки приложения и увидеть, где они застряли.

Вы также можете попробовать straceперехватить системные вызовы, выполняемые приложением, — это также может подсказать вам, что оно делает.

Связанный контент