WebLogic:管理控制台中常用超时配置项的分析与说明

netyeaxi 2024-08-22 17:03:04 阅读 83

一、超时参数

WebLogic作为服务器端,其控制台中部分常用的与超时相关配置项如下:

1、登录超时

MBean属性:ServerMBean.LoginTimeoutMillis

控制台中的位置:【环境】->【服务器】->【<应用服务器名>】->【配置】->【优化】

2、空闲连接超时

MBean属性:ServerMBean.IdleConncetionTimeout

控制台中的位置:【环境】->【服务器】->【<应用服务器名>】->【协议】->【一般信息】

3、完整消息超时

MBean属性:ServerMBean.CompleteMessageTimeout

控制台中的位置:【环境】->【服务器】->【<应用服务器名>】->【协议】->【一般信息】

4、连接保活超时

MBean属性:WebServerMBean.KeepAliveSecs

控制台中的位置:【环境】->【服务器】->【<应用服务器名>】->【协议】->【HTTP】

5、POST报文处理超时

MBean属性:WebServerMBean.PostTimeoutSecs

控制台中的位置:【环境】->【服务器】->【<应用服务器名>】->【协议】->【HTTP】

下面将以WebLogic12.2.1.4.0为例,逐一分析这些配置项是什么意思,以及如何使用。

1、登录超时

官方解释:

The login timeout for this server's default regular (non-SSL) listen port. This is the maximum amount of time allowed for a new connection to establish.

A value of 0 indicates there is no maximum.

MBean Attribute:

ServerMBean.LoginTimeoutMillis 

Minimum value: 0 

Maximum value: 100000 

Secure value: 5000

https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wlach/pagehelp/Corecoreserverserverconfigtuningtitle.html#attributes

代码分析:

1)com.oracle.weblogic.server.channels.jar

----weblogic.server.channels.ServerSocketManager

创建线程运行ServerSocket,准备接收新的连接请求。

2)com.oracle.weblogic.server.channels.jar

----weblogic.server.channels.ServerListenThread

线程循环运行,用于接收新的连接。

3)com.oracle.weblogic.server.channels.jar

----weblogic.server.channels.ServerSocketWrapper

     从代码中可以看到,接收连接并创建新socket后,调用Socket.setSoTimeout(int timeout)设置socket的读超时时间时,使用的正是loginTimeout的值。所以“登录时间”实际就是socket的读超时时间

   另外需要说明一下,loginTimeout的值是从ServerChannelImpl中获取到的。而ServerChannelImpl在创建时会设置NetworkAccessPointMBean,而NetworkAccessPointMBean是从ServerMBean中获取的。因此这里loginTimeout的值就是ServerMBean.LoginTimeoutMillis的值。

2、空闲连接超时

官方解释:

The maximum number of seconds that a connection is allowed to be idle before it is closed by the server. The T3 and T3S protocols ignore this attribute. If you configure network channels for this server, each channel can override this idle connection message timeout.

This timeout helps guard against server deadlock through too many open connections.

MBean Attribute:

ServerMBean.IdleConnectionTimeout 

Minimum value: 0 

Secure value: 65 

https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wlach/pagehelp/Corecoreserverserverprotocolsgeneraltitle.html

代码分析:

代码中会将这个属性改成另外一个名字,在后面的代码分析中会看到。

3、完整消息超时

官方解释:

The maximum number of seconds that this server waits for a complete message to be received. If you configure network channels for this server, each channel can override this message timeout.

This timeout helps guard against a denial of service attack in which a caller indicates that it will be sending a message of a certain size which it never finishes sending.

CompleteMessageTimeout affects the HTTP Response, such that if WebLogic Server discovers sockets inactive for longer than the CompleteMessageTimeout, the server will close these sockets.

MBean Attribute:

ServerMBean.CompleteMessageTimeout 

Minimum value: 0 

Maximum value: 480 

https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wlach/pagehelp/Corecoreserverserverprotocolsgeneraltitle.html

代码分析:

1)com.oracle.weblogic.socket.jar

----weblogic.socket.BaseAbstractMuxableSocket

IdleConnectionTimeout会转换成IdleTimeoutMillis属性,属性名发生了变化。

CompleteMessageTimout会转换成CompleteMessageTimoutMillis属性,属性名未变化。

2)com.oracle.weblogic.server.muxer.jar

----weblogic.socket.SocketMuxer.TimerListenerImpl

以上2个属性会在TimerListener中用到,TimerListener会定期清理符合以下条件的socket:

(1).空闲超过一定时间的socket

(2).报文没有接收完但在一段时间内又没有接收到新的报文的socket

TimerListener会每5秒执行一次。

4、连接保活超时

官方解释:

The amount of time this server waits before closing an inactive HTTP connection.

Number of seconds to maintain HTTP keep-alive before timing out the request.

MBean Attribute:

WebServerMBean.KeepAliveSecs 

Minimum value: 5 

Maximum value: 3600 

Secure value: 30 

https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wlach/pagehelp/Corecoreserverserverprotocolshttptitle.html

代码分析:

1)com.oracle.weblogic.servlet.jar

----weblogic.servlet.internal.MuxableSocketHTTP

    KeepAliveSecs会转换成IdleTimeoutMillis属性。即如果处理的是HTTP协议的请求,IdleTimeoutMillis会使用KeepAliveSecs的值,如果不是HTTP协议,则使用通用属性IdleConncetionTimeout的值。

       从这里也可以看出来,WebLogic的一些配置参数是分级的,第一级是通用配置,第二级是专用配置,如果一些专用协议有自身需要的配置参数值,那就单独配置,并覆盖通用配置的参数值。

      另外,官方给这个属性的名字是“持续时间”,感觉不太准确,叫“连接保活超时”应该更准确些。

5、POST报文处理超时

官方解释:

Timeout (in seconds) for reading HTTP POST data in a servlet request. If the POST data is chunked, the amount of time the server waits between the end of receiving the last chunk of data and the end of receiving the next chunk of data in an HTTP POST before it times out. (This is used to prevent denial-of-service attacks that attempt to overload the server with POST data.)

Gets the postTimeoutSecs attribute of the WebServerMBean object

MBean Attribute:

WebServerMBean.PostTimeoutSecs 

Minimum value: 0 

Maximum value: 120 

Secure value: 30 

https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/wlach/pagehelp/Corecoreserverserverprotocolshttptitle.html

代码分析:

   这里要注意,PostTimoutSecs没有转换成CompleteMessageTimoutMillis属性,CompleteMessageTimoutMillis属性仍是采用通用配置项CompleteMessageTimout的值。

1)com.oracle.weblogic.servlet.jar

----weblogic.servlet.internal.HttpConnectionHandler

2)com.oracle.weblogic.servlet.jar

----weblogic.servlet.internal.MuxableSocketHTTP

3)com.oracle.weblogic.socket.jar

----weblogic.socket.BaseAbstractMuxableSocket 

从这里可以看到,socket.soTimeout的值是直接设置的PostTimoutSecs的值。

    这里引出一个新的问题,到底Socket的soTimeout的值是用的LoginTimeout的值还是PostTimoutSecs的值?

    实际上这里是分处理阶段的,当socket刚创建时,用的是LoginTimeout的值,但解析出部分报文后,发现这个报文是HTTP协议的,于是再将socket设置成PostTimoutSecs的值。

二、总结

1、涉及到的jar

以上代码分析涉及到的jar如下:

com.oracle.weblogic.server.jar

com.oracle.weblogic.server.channels.jar

com.oracle.weblogic.server.channels-api.jar

com.oracle.weblogic.server.muxer.jar

com.oracle.weblogic.socket.jar

com.oracle.weblogic.socket.api.jar

com.oracle.weblogic.servlet.jar

com.oracle.weblogic.kernel.jar

com.oracle.weblogic.management.base.jar

com.oracle.weblogic.management.beanimpl.jar

com.oracle.weblogic.management.config.api.jar

2、处理流程

1)当Weblogic启动后创建TimerListener,并使用专门的线程运行它。它会每隔5秒找出空闲连接超时和完整消息超时的socket,找出后主动关闭socket。

2)当新的连接请求发送到Weblogic后,如果没有空闲连接则会创建新的socket,新的socket的soTimeout值使用LoginTimeoutMillis的值。

3)当解析部分报文后发现此报文为HTTP协议,则使用KeepAliveSecs作为空闲连接超时,并使用PostTimeoutSec重新设置socket的soTimeout的值。

参考文档

https://docs.oracle.com/middleware/1221/wls/WLAPI/index.html?weblogic/management/configuration/KernelMBean.html

https://docs.oracle.com/middleware/1221/wls/WLAPI/index.html?weblogic/management/configuration/ServerMBean.html

https://docs.oracle.com/middleware/1213/wls/WLMBR/core/index.html



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。