运行在linux上的JAVA程序突然消失了,没有任何系统异常日志

wushu15092 2013-05-07 02:41:47
没有任何征兆,JAVA程序运行一段时间后就停止了,而且是不定时的,甚至是有时候很长一段时间都正常运行,不仅JAVA程序自身的日志没有记录任何异常,连linux系统的syslog都没有任何异常。

程序没修改前没遇到过这种情况,修改代码,增加了一部分内存使用的代码后,就出现了这种问题。开始以为是内存泄露的问题,但是使用visualVM监测没有能看到明显的内存泄露痕迹。GC也回收正常。

我对这个真是没辙了,各位不知道有什么想法?
...全文
2645 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushu15092 2016-01-01
  • 打赏
  • 举报
回复
都两年的贴了,还有人回复....... 问题已经找到,原因是生产环境和业务的特殊性,程序会在极端情况下出现内存溢出问题,这个问题在测试环境下很难复现。建议有类似情况出现的朋友,要做好对程序的监控,不止是日志的输出,还有相关JVM的监控。 我是使用用wrapper工具守护程序。
小灰狼 2015-09-11
  • 打赏
  • 举报
回复
都2013年的帖子了,居然又拿出来晒
skgary 2015-09-08
  • 打赏
  • 举报
回复
要么是你自己代码调了system.exit 要么,触发了jvm什么bug ,应该会生成一个hserr之类的log,找一下看看。
撼地神牛 2015-09-08
  • 打赏
  • 举报
回复
引用 9 楼 wushu15092 的回复:
[quote=引用 7 楼 heli_lieren 的回复:] 兄弟, 你发的这个帖子解决了吗, 我也遇到这样类似的问题,求解答
还没有,采用了迂回的办法,启动一个守护线程或脚本,在程序异常消失的时候重新启动这个程序[/quote] 我也想知道
铁匠梁老师 2015-09-08
  • 打赏
  • 举报
回复
Runtime.getRuntime().addShutdownHook(shutdownHook);

   这个方法的含义说明:
       这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
 
用途

1应用程序正常退出,在退出时执行特定的业务逻辑,或者关闭资源等操作。

 

2虚拟机非正常退出,比如用户按下ctrl+c、OutofMemory宕机、操作系统关闭等。在退出时执行必要的挽救措施。
kardelpeng 2014-02-12
  • 打赏
  • 举报
回复
可能是System.out.print这种日志打印积累影响。
heli_lieren 2014-02-11
  • 打赏
  • 举报
回复
引用 9 楼 wushu15092 的回复:
[quote=引用 7 楼 heli_lieren 的回复:] 兄弟, 你发的这个帖子解决了吗, 我也遇到这样类似的问题,求解答
还没有,采用了迂回的办法,启动一个守护线程或脚本,在程序异常消失的时候重新启动这个程序[/quote]能把脚本贴出来看看吗
wushu15092 2014-01-03
  • 打赏
  • 举报
回复
引用 7 楼 heli_lieren 的回复:
兄弟, 你发的这个帖子解决了吗, 我也遇到这样类似的问题,求解答
还没有,采用了迂回的办法,启动一个守护线程或脚本,在程序异常消失的时候重新启动这个程序
小V小V志 2013-12-30
  • 打赏
  • 举报
回复
heli_lieren 2013-12-30
  • 打赏
  • 举报
回复
兄弟, 你发的这个帖子解决了吗, 我也遇到这样类似的问题,求解答
wushu15092 2013-05-09
  • 打赏
  • 举报
回复
感谢各位的回答,可能我没说清楚,首先System.exit(0)这个是肯定不会的,因为代码里没有这个;第二就是在main函数里添加try..catch是没有用的,因为我的main函数里只起到一个作用,就是启动定时任务,即timer类函数。 因为我的程序是向多个服务器取数据,在进行测试的时候完全没有问题,想跑多久就可以跑多久。但是放到别人的服务器上跑就会出现问题。所以我更多的是怀疑外部原因造成程序异常中断。如果是正常中断,程序的日志里会有记录。
xianwangkai 2013-05-08
  • 打赏
  • 举报
回复
第一、在你主函数的开头或者结尾增加日志功能。 第二、在你的执行主函数增加一个大的try、catch,然后在catch中增加日志,看看!
BadPattern 2013-05-08
  • 打赏
  • 举报
回复
main函数最后打印点Log跟踪一下,有可能你的main函数在某种情况下返回了
若鱼1919 2013-05-07
  • 打赏
  • 举报
回复
System.exit(0);有调用这个吧?
shoulders 2013-05-07
  • 打赏
  • 举报
回复
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/java.html 从这个文档里面找找一些java的参数,想verbose一类的能帮你找到问题的原因。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧