系统运行一段时间就死掉的解决办法

背景:本人基于jfinal做了一个充值,但是系统运行一段时间就会死掉无响应

之前也给波总反馈过几个帖子,看到也有很多人在反馈这个问题,下面是我反馈的帖子

http://www.jfinal.com/feedback/2622

http://www.jfinal.com/feedback/2595

部署环境:阿里云windows server  ,tomcat容器(通过start.bat 黑窗口启动))

具体问题描述:系统假死后,查看了一下后台的线程,大部分都处于阻塞状态,阻塞的地方基本上就是system.out.print


解决过程:

  1. 在服务器部署程序的时候把devmode改为了true,因为devmode会打开actionreport, 而actionreport会调用system.out.print,改了之后确实稳定了一些,但是还有时候会假死

    image.png

  2. 把代码中所有的system.out.print都去掉了,并且调大了tomcat的并发数,又更加稳定了一些,但是还有假死的情况,这时候报的是log4j引起的假死

  3. 查看log4j源码,同时结合网上的办法,把原来的log4j   ImmediateFlush =true 配置改为了fasle,增加了BufferedIO=true  BufferSize =8192 

    image.png

这么一改平稳运行了好多天,但是又TM死在了某一天,十分费解

4.直到有一天,在网上闲逛,看到了他

http://blog.csdn.net/java2000_net/article/details/2920155

image.png

我也试着在tomcat控制台敲了一下回车,奇迹出现了,所有阻塞的线程都运行完成了,我接着按照他的办法进行了设置,然后写了个多线程的小代码进行10000次并发测试,系统依然坚挺


解决办法:找到tomcat控制台,然后设置他的属性

image.png


反思:system.out.print一直运行不完的原因应该就是在等这个console资源,其他的system.out.print一直被阻塞,直到所有的tomcat线程都耗尽了,就会出现系统不响应

PS:解决问题一定要坚持不懈,一天解决不了就两天,不行就三天

还有不要怀疑jfinal的稳定性


关注我的公众号,免费获取Java + Jfinal学习视频

image.png


评论区

快乐的蹦豆子

2018-01-07 15:49

充值平台,少打了“”平台“”二字

JFinal

2018-01-07 17:24

你用的 tomcat 与 windows 太老了,难免有些问题,这个问题确实很诡异,感谢你的分享

我有一个与客户对接的 jfinal API 项目在阿里云上跑了快两年,从来没重启过。客户自己对接的部分死了都不知到多少回了,问我的系统为啥这么稳,我说我用的 jfinal

快乐的蹦豆子

2018-01-07 21:47

@JFinal 那个链接里面的用的比较老,我用的是tomcat7 和winserver 2008,不算太老

loveyeah

2018-01-10 00:44

的确存在一段时间会死掉的问题

loveyeah

2018-01-10 00:46

@loveyeah 用的是阿里云,Centos7+Tomcat8+JDK8,运行一段时间后,系统会宕掉。重启后又OK。

芦苇

2018-01-11 14:10

windows控制台选中后进程肯定中断,我想知道的是,你这个控制台点击时不小心自己点击中断了还是无缘无故自己点击中断?我想应该是人为操作的吧?例如:有别的人远程上去点击了一下控制台窗口。。

快乐的蹦豆子

2018-01-13 21:33

@loveyeah 看看线程dump,我就是看这个分析的原因

快乐的蹦豆子

2018-01-13 21:34

@芦苇 我用startup.bat启动的tomcat,但是一般都把他最小化,应该和选中不选中没有任何关系,我把那个选项去掉后即使选中了也没问题

芦苇

2018-01-18 11:45

@快乐的蹦豆子 那个选项去掉后,在控制台根本想选中也选不中,所以不存在中断

快乐的蹦豆子

2018-01-18 17:23

@芦苇 你说的选中是选中控制台的文字?我没有选中控制台文字

芦苇

2018-01-19 15:08

@快乐的蹦豆子 嗯,就怕有别人上去点一下就会选中了,操作系统应该不会无缘无故终端控制台的

热门分享

扫码入社