Рейтинг:0

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

флаг vn

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

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

Java версии 1.8
AIX 7.1

Запись в кронтабе:

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 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 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 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. журнал
33947736 7340260 0 апр. 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 апреля 03 – 965:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
34471988 7340260 0 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 апр. 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 31 марта - 2444:53 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
38863052 7340260 0 апр. 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 26 марта - 5463:39 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
40304674 7340260 0 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 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 22 марта - 8316:22 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46596146 20512790 29 27 марта - 4821:18 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46792934 27132138 26 24 марта - 6883:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46923976 30932996 26 25 марта - 6177:01 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar

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

флаг fo
Также спросил на https://stackoverflow.com/q/71757596/7552
AnujaDx avatar
флаг vn
@glennjackman Да, но тем временем разместил здесь, так как это портал для Linux.
флаг ae
У вас есть журналы, которыми вы можете поделиться? Что произойдет, если вы захватите дамп потока ожидающих процессов Java — где они застряли? Вы можете получить дамп потока с помощью `jcmd` или простого `kill -3 ` (в этом случае он будет напечатан на стандартном выходе)
Jeff Schaller avatar
флаг nf
Интересно, полагается ли ADM_AUTOMATE_SERV на переменную среды, которая присутствует в вашей интерактивной оболочке, но не в неинтерактивной оболочке. Попробуйте сравнить вывод `env` из вашей интерактивной оболочки с запуском из `RUN.sh`.
флаг fo
@AnujaDx, это может разочаровать человека, который тратит время и усилия на ответ на одном сайте только для того, чтобы позже найти тот же вопрос на другом сайте с большим количеством комментариев и лучшими ответами. На некоторых сайтах StackExchange перекрестная публикация является основанием для закрытия вопроса. По крайней мере, вы могли бы связать два вопроса самостоятельно.
Рейтинг:2
флаг ae

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

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

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

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

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

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

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

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

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

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.