问题现象:
1、系统异常,应用拒绝访问。
2、web容器线程爆满
问题分析:
1、数据库正常
2、日志信息没有异常
问题思考:
1、应用访问量突破顶峰。
2、应用在某处存在瓶颈
发现问题:
需要了解线程的一举一动,莫过于对线程栈的分析,以下是对Javacore文件分析截图:
通过以上截图分析可以看出瓶颈出现在等待httpclient的连接,通过对Xfire源码追踪分析发现以下信息:
从上图可以看出,XFire默认是设置了最大hostpool的连接数为6,而全局最大连接数为20。对于应用当前并发, 肯定扛不住。
解决问题:
现在解决问题的思路只有一个放大httpclient并发连接,因为是Xfire引起的httpclient瓶颈,无法直接设置httpclient的参数,肯定只能通过Xfire入口配置,但到底在哪里配置,还需要对Xfire源码继续跟踪:
这个HashMap就是整个XFire上下文的载体,所有的配置信息都在这个hashMap里面。
解决方案:
通过对这个HashMap配置httpclient连接信息,放大连接并发数: