快速业务通道

Weblogic81中HttpCompleteMessageTimeout相关的两个异常 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
(60秒内,4k的数据无法发送完成),首要解决方法就是调优网络。从weblogic方面来看,我们可以通过调整如下两个参数来解决这个问题,但这不是解决问题的关键。

1:增加HttpCompleteMessageTimeout,最大值为480秒

2:减小weblogic.ChunkSize

至于BEA-101083,通常是因为客户端发送的请求数据不能在HttpCompleteMessageTimeout内完成,常见的两种情况是:性能很差的网络环境、黑客攻击(连续的向服务器写入数据,但每次写入很少的数据,例如,10bytes/secs或更少)。客户端数据读取超时是通过SocketMuxer.TimeoutTrigger实现的。这个trigger同时还负责IdleTimeout(KeepAlive的 HttpConnection的Duration,默认为30秒)。

1   /*package*/ final int checkTimeout(long idleTimeout, long msgTimeout) { 2     int status = OKAY; 3     long interval; 4     synchronized (this) { 5 6       if (messagePending()) { 7         if (msgTimeout <= 0) return OKAY; 8         /* 9         *get time left for reading message from client. When SocketMuxer begins reading packets 10         *from http connection. System.currentTimeMills() is recorded info SocketInfo as lastMessageReadingStartedTimeMillis 11         *and in getMessageIntervalMillis(), it returns (System.currentTimeMills() - info.lastMessageReadingStartedTimeMillis) 12         *If reading finishes in time, SocketMuxer will set messagePending to false. 13         */  14         interval = getMessageIntervalMillis(msgTimeout); 15         if (interval <= msgTimeout) return OKAY; 16         status = MSG_TIMEOUT; 17       } else { 18            //idle timeout is checked here 19       } 20       //for MuxableSocketHttp, ms.requestTimeout() is always true, i.e., timeout affects such connection 21       if (!ms.requestTimeout()) return OKAY; 22       setCloseOnly(); 23     } 24     return status; 25   }

对于IdleTimeout,可以参考SocketInfo.lastIoInitiatedTimeMillis 

Last time we had some activity on socket, for enforcing idle timeout of a socket.  A -1 value indicates that there is no pending IO.

用于控制keepAlive的HttpConnection空闲多长时间后将被weblogic关闭,所以空闲,是指Socket上没有IO操作。

要解决BEA-101083,基本和BEA-101326差不多,还是要解决网络性能问题,另外就是加强网络安全管理,防止黑客攻击。

最后在说一下CompleteMessageTimeout设定,weblogic admin console上提示改设定是动态的,即不需要重启,但实际并不是这样的。如果该设定是要解决BEA-101083,那么它是动态的,不要重启,而如果是要解决

BEA-101326,那么要使设定生效,重启是必须的。我们看一下两个trigger就知道了,

BEA-101083,SocketMuxer,

1   protected class TimeoutTrigger implements Triggerable { 2     public void trigger(Schedulable sched) { 3       MuxableSocket[] socks = getSockets(); 4       for (int i = 0; i < socks.length; i++) { 5 6         MuxableSocket ms = socks[i]; 7         Soc

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号