您的位置:首页 > 其它

一个部署上线的问题:websphere发布war包时和以往不同,突然异常缓慢耗时

2017-08-16 14:04 357 查看
昨天项目上生产,把最近开发的代码合并后,达成war包上线。同样的war包,放在测试环境三分钟就启起来了,放到生产上启动半个小时,终止程序则直接卡掉。cup达到满负荷。由于集成了两台server,导致启动完成更慢。但是改回上一次war包又恢复正常。

出现的war包发布突然异常缓慢的原因,我们分析了框架,看了jdk的版本,是不是缓存导致的,由于页面较多,是不是静态资源扫包费时?经过分析发现缓存的嫌疑很大。因为别的部分几乎和原来的部署方式一样。框架和jdk没变动过。页面这些静态资源也增加不多。而缓存加载的东西比较多,也是费时间较长的,这是迭代看合并的资源记录,这块有新内容更新。涉及到查数据库。并且日志记录一到初始化容器就卡住。信息和数据库有千丝万缕的关系。虽然定位到缓存,但一时也没找到问题点。

最后在websphere的系统日志中,发现有一个缓存的方法加载时间非常长,然后
4000
根据这个方法,顺藤摸瓜找到病因:有一个方法在加载缓存查询数据库时,加载的人员表数据量比较大,加上联表查询的语句没有优化,导致执行效率低,导致项目一加载到这里就卡住。由于项目上线比较着急,就临时注释掉了这块的缓存,重新部署,果然发布又恢复了正常。这就找到了病因!

经验总结:

1.websphere的系统日志和项目日志同等重要,不要忽略了这个。

2.带有前台页面的web项目和只提供接口的soa项目有个最大的区别就在于有页面的web项目一般都涉及比较多的缓存要提前加载。而soa缓存比较少。其次才是框架。

3.如果不是第一次部署项目,而最新一次的项目部署突然异常缓慢的原因主要定位于最近这次迭代更新的内容,而不是框架,jdk和静态页面内容增多。重点在于启动时就要查库的后台方法或者js。最近就遇到两例特殊sql查表出现查表异常缓慢,简单的一个两表联表查询,就能耗费好几分钟。

4.sql联表查询缓慢的主要原因不在于你设置了多少查询条件,而是这两个表的数据量巨大,几百万甚至更多条记录。比如人员信息表和一些保单表。

5.注意到生产环境和测试环境的最大不同:数据量不在一个量级上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐