
我使用自定义的shell脚本在linux机器上运行java应用程序作为后台进程。
由于我是java和linux的新手,我想知道应用程序本身是否有可能重启(就像重新启动),并从应用程序崩溃,未处理的exception或内存不足等情况中恢复。
提前致谢
Ashish Sharma
在java中,“5/0”语句不会在我的linux机器上激发SIGFPE信号,为什么?
Fedora OpenJDK设置JAVA_HOME
Java代码意外地将“&#13”附加到行尾
类没有被自动编译
系统调用获取linux中的机器序列号(用java编程)
如何正确使用ProcessBuilder
无法从pom获取<systemPropertyVariables>variables值
popupJComboBox和JPopup的错误
java中的endTime有些问题
如何根据 *** 作系统更改文件path
JVM被设计为在发生不可恢复的错误时死亡。 你所描述的属于这个类别。
但是,您可以轻松地编写一个shell脚本或一个Python脚本来检查进程是否还活着,如果它已经死了,请等待几秒钟并重新启动它。 作为一个暗示要做到这一点,Unix命令“pgrep”是你的朋友,因为你可以检查用于激发JVM的确切命令行(因此包括启动类文件)。 这样,您可以确定特定的JVM实例是否正在运行,然后重新启动它。
所有这一切,你可能想要添加一些报告或日志记录功能,并检查是否经常,因为它很容易假设事情是确定的,事实上守护进程每隔几分钟就要死亡。 确保你已经做了你能做的,以防止它复活之前死亡。
有一些可以处理这个问题的包装器 ,比如Java服务包装器 (请注意,社区版本是GPL下的)和一些替代品,在这里提到
说实话,在发生崩溃之后毫无疑问重新启动守护进程可能不是一个好主意, 那么它很大程度上取决于守护进程实现的处理类型,但是如果它处理来自给定目录的文件或者来自队列管理器的请求,并且文件/消息包含导致崩溃的一些意外数据,请重新启动守护进程会立即再次崩溃(除了文件/消息被删除,无论它是否被正确处理或没有,但也似乎不是一个好主意)。
总之,最好跟踪可能的崩溃原因并在可能的情况下修复它们(或者至少记录问题并继续前进,假设日志消息将被扫描以最终警告人类,所以一些行动可以参与这样的“失败”)。
无论如何,如果你有很好的理由这样做,一个解决方案甚至比“检查进程是否还活着”(因为它可能会涉及一些“ps -blahblah”东西),你可以把Java程序启动在一个shell中“while true”循环如下:
while true do # launch the java program here,no background # when crashing,the shell will be given hand back java -classpath blahblah... echo "program crashed,@R_213_4404@ing it..." done
在基于Unix的系统上,您可以使用“inittab”来指定程序。 如果进程死亡,则由OS重新启动(重生)
我不确定应用程序本身是否可以处理这种崩溃。 你可以在linux中编写一个shell脚本,它可以作为一个cron作业来管理应用程序,检查java应用程序是否按照预定的时间间隔运行,如果没有,它会自动重新启动它。
总结以上是内存溢出为你收集整理的从崩溃中恢复/重启Java守护进程全部内容,希望文章能够帮你解决从崩溃中恢复/重启Java守护进程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)