首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个java进程在AIX服务器上执行了cron作业之后就不会结束?

为什么这个java进程在AIX服务器上执行了cron作业之后就不会结束?
EN

Server Fault用户
提问于 2022-04-05 20:30:00
回答 1查看 167关注 0票数 0

我已经设置了一个crontab,用于在AIX(7.1)操作系统中每8小时执行一次java服务。一旦crontab完成了任务,JAVA服务就应该结束了。这个职位运转正常。但是java服务没有在结束时关闭它的会话。而且,这个java服务需要3-4个小时来处理这些文件。

Java会话日积月累,最终导致应用程序服务器空闲。

Java版本1.8

AIX7.1

Crontab条目:

代码语言:javascript
复制
00 8 * * * cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log

如果手动执行上述语句,则cron作业将正常运行,并在结束时关闭会话。

RUN.sh文件:

代码语言:javascript
复制
/usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar 

下面是仍在应用服务器中运行的java会话。请看一看,告诉我出了什么问题?

代码语言:javascript
复制
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

非常感谢你在这件事上的时间和努力。

EN

回答 1

Server Fault用户

发布于 2022-04-06 07:40:35

我首先做了一个评论,但我认为写一个正确的答案会更有意义。

我首先要检查的是日志:在run.log中有什么有意义的东西吗?(也许您可以追加到该文件中,而不是每次作业运行时都覆盖它)

然后检查进程正在运行的用户/组--它从cron运行时与您自己运行它时有所不同吗?

找出Java/JVM应用程序卡在哪里的一个非常有用的技术是做一个线程转储--有几种方法:

  • 我最喜欢的工具是jcmd -你可以简单地做jcmd <pid> Thread.print > thread.$(date "+%F_%H-%M-%S").dump
  • 另一种快速发送信号的方法是:kill -3 <pid>
    • 在这种情况下,线程转储将被打印到进程的stdout。

有了一个线程转储,您可以检查应用程序线程并查看它们被卡在哪里。

您也可以尝试strace来捕获应用程序发出的系统调用--这也可以告诉您它在做什么。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1097895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档