背景:本人基于jfinal做了一个充值,但是系统运行一段时间就会死掉无响应
之前也给波总反馈过几个帖子,看到也有很多人在反馈这个问题,下面是我反馈的帖子
http://www.jfinal.com/feedback/2622
http://www.jfinal.com/feedback/2595
部署环境:阿里云windows server ,tomcat容器(通过start.bat 黑窗口启动))
具体问题描述:系统假死后,查看了一下后台的线程,大部分都处于阻塞状态,阻塞的地方基本上就是system.out.print
解决过程:
在服务器部署程序的时候把devmode改为了true,因为devmode会打开actionreport, 而actionreport会调用system.out.print,改了之后确实稳定了一些,但是还有时候会假死
把代码中所有的system.out.print都去掉了,并且调大了tomcat的并发数,又更加稳定了一些,但是还有假死的情况,这时候报的是log4j引起的假死
查看log4j源码,同时结合网上的办法,把原来的log4j ImmediateFlush =true 配置改为了fasle,增加了BufferedIO=true BufferSize =8192
这么一改平稳运行了好多天,但是又TM死在了某一天,十分费解
4.直到有一天,在网上闲逛,看到了他
http://blog.csdn.net/java2000_net/article/details/2920155
我也试着在tomcat控制台敲了一下回车,奇迹出现了,所有阻塞的线程都运行完成了,我接着按照他的办法进行了设置,然后写了个多线程的小代码进行10000次并发测试,系统依然坚挺
解决办法:找到tomcat控制台,然后设置他的属性
反思:system.out.print一直运行不完的原因应该就是在等这个console资源,其他的system.out.print一直被阻塞,直到所有的tomcat线程都耗尽了,就会出现系统不响应
PS:解决问题一定要坚持不懈,一天解决不了就两天,不行就三天
还有不要怀疑jfinal的稳定性
关注我的公众号,免费获取Java + Jfinal学习视频