- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JBOSS内容错乱的分析过程
JBOSS内容错乱的分析过程
在线服务的应用在发布一个应用后突然出现用户帐号串号现象,这个问题的严重性完全是重大事故级。
对于商业网站简直是致命的,线上在出现问题的时马上进行了回滚。对出现问题的用户进行手工修正数据等善后工作。
因为之前基本没有这个情况(说基本没有,是据说一年前出现过这样的一次情况,因为只出现过一次而且是一年前的,当时怀疑有可能是网络接入层的数据缓存)。就因为一个应用发布突然出现大量(对于商业网站,如果出现十几个,几十个用户帐号错误,应该算是大量了),所以首先从新发布的应用查起。
有一个线索就是当出现串号时,有些页面的内容和状态码都发生错误,本来应该是302的却变成了200还有的页面内容明显不对,本来只有true和false输出,但却输出一段HTML。
虽然不相信公司的程序员会将Session变量定义在请求处理之外,但还是小心地扫描一遍,排除。
我们的应用中因为分布式应用的Session Store是自己实现的,所以对Request,Response,Session,Context都进行了拦截包装,如果某些罗辑导致没有提交Response,可能会造成脏数据。但是对所有代码进行逐行分析,没有发现这样的问题。
一个Servlet中只有一行代码:Response.sendReDirect(/path);这是为了将原来多个不同的URL转向同一请求的,理论上这个URL肯定返回302, 但却在发生串号时返回200.所以怀疑是否是在filter中某种条件下chain没有调用,直接返回了,请求没有到达servlet.结果对所有filter分析后没有这种情况。
有些束手无策了,有哪些信誉好的足球投注网站引擎能有哪些信誉好的足球投注网站到的内容的参考率为零。
从对业务层的怀疑转移到了容器环境。
一开始没有怀疑容器环境是因为之前没有出现这个问题,就是因为一个应用的发布而出现的,现在应用本身的业务代码基本排除问题,所以想象是否是容器环境以前存在问题,但因为条件没有达到而没有触发,这次应用发布后因为一个活动使访问量增加好几倍,是否是因为压力上升而导致原来隐藏的问题触发出来了?
公司其它的应用的容器环境已经成熟稳定多年,所以主要看这个应用的容器环境和其它应用环境的区别。
发现大多数应用都是apache2.0.3+jboss4.0.5+mod_jk1.2.28而这个应用是apache2.0.3+jboss4.2.3+mod_jk1.2.26. jk版本本来就是从1.2.26升级上去的,升级之前也没有发生过这种情况,所以先查jboss4.2.3。
有哪些信誉好的足球投注网站jboss4.2.3的BUG列表,终于发现一个靠普的问题。
jboss4.2.3使用的是jbossweb2.0.1,对于GA版本,2.0.x都存在一个BUG,会造成数据错乱:
org.apache.catalina.connector.Request.java中的parseParameters方法中,最后几行:
byte[] formData = null;
if (len
if (postData == null)
postData = new byte[CACHED_POST_LEN];
formData = postData;
} else {
formData = new byte[len];
if (readPostBody(formData, len) != len) {
return;
} catch (IOException e) {
// Client disconnect
if (context.getLogger().isDebugEnabled()) {
context.getLogger().debug(
sm.getString(coyoteRequest.parseParameters), e);
cessParameters(formData, 0, len);
在Servlet引擎处理实际的客户端请求时,并不是每次请求生成一个Request对象,而是一个线程池绑定一个Request对象,在处理一个请求后进行清理然后重用。但是postData并没有清理。
如果客户端是一个POST请求,在从apache通过jk向jboss传送时,jk先告诉jboss本次传输的body长度是x, 而jboss在readPostBody时没有读到相应的长度,可能发生超时,虽然异常被捕获了,但却没有return,继续运行到了下面的
c
文档评论(0)