查询程序崩溃日志_Java程序导致服务宕机问题解决方法论(一)

由于工作原因经常解决一些宕机问题,发现以下几个问题导致Tomact崩溃,对以下几个问题,总结一下,记录下来。

在Java程序中容易引起Tomact服务器挂掉的最严重的几个问题如下:

1、内存溢出

2、连接不释放

3、数据库SQL执行缓慢

4、大数据量查询

5、excel数据导入导出

6、日志记录问题

7、触发器问题

我下面会一个一个的讲解。(这些问题中是交叉出现的)

第一个:内存溢出问题。

关于内存溢出问题,我们先看看JVM内存模型以及垃圾回收机制。

9d248416b8910369d0e32b40c962f954.png
561f54d7f41a489d908587ea2d1d9749.png

在一些项目中出现内存溢出的情况如下:

1、Session会话保持时间太久,缓存在会话中的对象没有释放,导致内存被过度耗用。最终出现溢出。【建议在系统中的会话失效时间可以设置为4小时,具体根据项目而制定】

2、程序设计不合理,关闭窗口的时候没有清除相关的Session信息。【建议关闭窗口的时候,清除Session】

3、查询数据量过大。不需要一张表的数据一次查询出来,建议使用分页查询。具体看业务而定。

4、使用导出、导入Excel时出现内存溢出,jxl相关的对象占用大量的内容。建议在excel导出和导入的操作中,不要一次性将一张表的数据都导出导入。

5、数据库链接不释放问题。可以使用detect来监控。出现这种问题主要是在Spring中事物配置在Service中,有些代码直接调用DAO,绕过了Service,那么事物将不能被关闭。

6、比如一些需要关闭的操作没有关闭,像Session,IO操作等。如下:

22e87ccc57fce09355d97ec8bd76f5a8.png

7、SQL执行缓慢问题。一条SQL语句执行了很长很长时间都没有返回结果,轻者影响本模块的使用,严重的导致整个数据库被拖死,所有其他功能模块均受影响,因此,SQL的执行效率对系统性能有很大影响。

MS SQL Server中获取执行最慢的SQL语句。

293a5e7f050e7c3747415a9b7d8533f1.png
ef6949d0b76a1ec53615c06231a198a8.png

8、日志记录问题。

主要是在集群的环境下,比如8个Tomact集群,每个Tomact中的应用中的log4j都使用绝对路径(相当于8个Tomact共享一个日志文件),日志的写入都是单线程的,但前段压力来的时候,导致大量线程在日志处理的部分卡住。

9、触发器问题。

(1)、当项目管理与合同管理2个库之间的网路不可靠 或者合同管理的库有异常,停止服务由于触发器的缘故,项目管理的相关模块将被阻塞,无法正常运行。

(2)、触发器的逻辑没有处理好。出现了死循环。拖死了数据库。

48c9c2b18bebb7c97e4ab441b80d949f.png
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值