tomcat connector 缓存连接数过多至内存溢出

最新有过一次内存溢出,把heapdump拉下来分析了一下,发现org.apache.coyote.RequestInfo存在上W个实例,再仔细一下都是放在org.apache.coyote.RequestGroupInfo的processors对象中,再进一步查看发现在里面的request不只是html而且js等资源的请求也缓存在里面,于是我断定这问题不是出在应用,应该是TOMCAT连接器上出问题了,于现开始疯狂的百度,贴吧,但好像没有人知道是怎么回事,我也来回不停的端详着内存分析器,怎么也看不出原因,经过几天的折腾,我终于静下心来,跑到APACHE上下了个TOMCAT源码做起了DEBUG,DEBUG直指org.apache.coyote.RequestGroupInfo的addRequestProcessor方法,主要是看是这个方法栈的来龙去脉,终于在Http11Protocol中让我找到了问题,问题的关键就在于processorCache这个变量,tomcat默认是-1,就是说无限制缓存,就是这个导致了上W实例的产生,于是我们只要把这么改成一个固定值就可以了,找到server.xml,再找到相对的连接器,如下

<Connector port="8080" protocol="org.apache.coyote.http11.Htp11Protocol"
processorCache="500"
connectionTimeout="20000"
URIEncoding="UTF-8"/>


如果是AJP的连接器的话,如不想缓存,可做以下设置
request.registerRequests="false"

如是NIO连接:
socket.processorCache="500"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值