tomcat中的Digest严重bug

简介:
在web开发中,我遇到了一个很严重的内存泄漏问题,困扰了我一段时间,但经常周折才在HPjmeter的帮助上找到了问题的根源,原来是Digest认证的问题,并且是tomcat的大bug. 现给大家介绍一下,希望大家也能从中受益。
 
发生问题的类就是DigestAuthenticator.java
 
里面有这么一句话:
   // Updating the value in the no once hashtable 我个人看,这段代码是tomcat开发人员想处置的一段代码,但可能没有最终用,把这句代码就留下来了,但你可别小看它,它的意思就是往hashtable中加入一条数据,你的web应用如果有大量的digest认证连接就坏了,这段代码会往hashtable加入了很多垃圾数据,但没有代码往外清理,那这就是内存泄漏,我们的同仁说这是内存keep. 解决的办法也很简单就是把这句话注释掉。 
    nOnceTokens.put(nOnceValue, new Long(currentTime + nOnceTimeout));
 
列出下面tomcat对这个bug的解释(太可气了,人家才说这是p2的bug)
The DigestAuthenticator class contains a small but significant leak. In the
generateNOnce method, the 
nOnceValue is inserted into a Hashtable with an expire time. This feature does
not appear to be fully 
implemented and as a result the Hashtable "nOnceTokens" will continue to grow
un-bounded.

The short term solution to this problem is to remove the Hashtable insert since
it isn't apparently being 
used.

Longer term, the host-expireTime-otherState tuple could be encoded in
client-opaque nOnceValue and 
used across multiple TC5 instances.

本文转自 tianjinhm 51CTO博客,原文链接:http://blog.51cto.com/hanmei/135378

相关文章
|
Java 应用服务中间件 容器
Tomcat报错 严重: A child container failed during start
Tomcat报错 严重: A child container failed during start
199 0
|
IDE 应用服务中间件 程序员
如何删除 eclipse 中多余的 Tomcat server?为什么产生这种 bug?
如何删除 eclipse 中多余的 Tomcat server?为什么产生这种 bug?
329 0
|
应用服务中间件 编译器 数据库
【bug:eclispe中启动Tomcat警告】无法启动组件、子容器启动失败
【bug:eclispe中启动Tomcat警告】无法启动组件、子容器启动失败
1137 0
【bug:eclispe中启动Tomcat警告】无法启动组件、子容器启动失败
|
Java 应用服务中间件 Maven
将maven项目部署到tomcat服务器(可能遇到的bug: 启动tomcat后,Maven项目做的ava Web时无WEB-INF/classes)
将maven项目部署到tomcat服务器(可能遇到的bug: 启动tomcat后,Maven项目做的ava Web时无WEB-INF/classes)
182 0
将maven项目部署到tomcat服务器(可能遇到的bug: 启动tomcat后,Maven项目做的ava Web时无WEB-INF/classes)
|
Java 应用服务中间件 容器
Tomcat是如何修正JDK原生线程池bug的?
为提高处理能力和并发度,Web容器一般会把处理请求的任务放到线程池,而JDK的原生线程池先天适合CPU密集型任务,于是Tomcat改造之。
146 0
Tomcat是如何修正JDK原生线程池bug的?
|
运维 Java 应用服务中间件
用了 10 多年的 Tomcat 居然有bug !
为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现。然后我们为SpringBoot框架写了一个starter以让用户实现近零改造接入全链路。
178 0
用了 10 多年的 Tomcat 居然有bug !
|
安全 Java 应用服务中间件
【bug:eclispe中启动Tomcat警告】org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
【bug:eclispe中启动Tomcat警告】org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
482 0
|
网络协议 Java 应用服务中间件