|
WebLogic Server 具有检测和避免超载情况,以及从超载情况下恢复的功能。WebLogic Server 的超载保护功能有助于防止由于在达到系统容量的情况下继续接受请求而可能导致的负面结果,即应用程序性能和稳定性下降。
达到系统容量时,如果应用程序服务器继续接受请求,应用程序性能和稳定性则可能会降低。下面几部分介绍了可如何配置 WebLogic Server,以便将系统超载引起的负面效果降至最小。
在 WebLogic Server 中,无论是与系统管理相关的请求还是与应用程序活动相关的请求,都是在一个线程缓冲池中处理的。管理员可以通过定义最大队列长度来限制线程缓冲池的大小。如果超过配置的值,则 WebLogic Server 会拒绝除管理通道之外的请求。
| 注意: | 管理通道仅允许管理员进行访问。您对执行长度所设置的限制不会影响管理通道请求,这样是为了确保达到最大线程缓冲池长度时不会阻止管理员访问系统。要限制线程缓冲池中允许的管理请求数,可以配置一个管理通道,并为该通道设置 MaxConnectedClients 特性。 |
达到排队请求最大数时,WebLogic Server 将立即开始拒绝下列请求:
通过在管理控制台中设置“最大执行队列长度”字段,可以限制线程缓冲池的大小。(请参阅“环境 > 服务器 > 线程”,然后选择执行队列。)此字段的默认值为 65536。
管理员可以对工作管理器进行配置,以便在更细的粒度级别上为具有相似性能、可用性或可靠性要求的请求组管理线程缓冲池。工作管理器可以指定某个特定请求类的最大可排队请求数。工作管理器中定义的最大请求数与全局线程缓冲池值一起,协同发挥作用。将服从首先达到的限制。
请参阅使用工作管理器优化调度的工作。
管理员可以根据低内存情况的检测来限制活动 HTTP 会话数。这对于避免出现内存不足异常非常有帮助。
达到配置的阈值之后,WebLogic Server 将拒绝要新建 HTTP 会话的请求。在一个 WebLogic Server 群集中,代理插件会将被拒绝的请求重定向到该群集中的另一个受管服务器。非群集服务器实例则可以将请求重定向到备用服务器实例。
可在 Web 应用程序的部署描述符中设置同时存在的 HTTP 会话数的限制。例如,下列元素会将会话数限制设置为 12 个:
<session-descriptor>
<max-in-memory-sessions>12</max-in-memory-sessions>
</session-descriptor>
管理员可以对 WebLogic Server 进行配置,以便在出现内存不足异常时退出。通过此功能,可以将内存不足情况的影响降到最低 - 自动关闭有助于避免出现应用程序不稳定的情况,您可以配置节点管理器或其他 HA 工具来自动重新启动 WebLogic Server,从而将关闭时间缩减到最短。
使用管理控制台或通过编辑 config.xml 中的下列元素可以配置上述功能:
<overload-protection>
<panic-action>system-exit</panic-action>
</overload-protection>
有关详细信息,请参阅 OverloadProtectionMBean 的特性。
WebLogic Server 会定期检查是否存在阻塞线程。如果所有应用程序线程均发生阻塞,则服务器示例将会将其自身标记为失败,如果配置了在此情况下退出,则会退出。您还可以对节点管理器进行配置或配置一个第三方高可用性解决方案,以重新启动该服务器实例,从而实现自动失败恢复。
通过在“Overload Protection”页(可通过在管理控制台中依次选择“服务器”->“Overload Protection”页来访问该页)上选中“Exit server process on detecting deadlock”选项,可以将服务器实例配置为在所有应用程序线程发生阻塞时退出。
您还可以进行配置,以便在并非所有线程均阻塞,但阻塞线程数超过配置的阈值时会发生下面这些操作。
有关详细信息,请参阅 OverloadProtectionMBean 的特性。
下面几部分讲述了可帮助确定和报告超载情况的 WebLogic Server 功能。
当某个生命周期状态为“RUNNING”的服务器实例变为超载时,WebLogic Server 将具有一个新的运行状态“OVERLOADED”,该状态是由 ServerRuntimeMBean.getHealthState() 返回的。当超过了工作管理器容量时,或者由于内存过低,会发生这种情况。
超载情况过去之后,服务器实例运行状态将恢复为“OK”。管理员可以挂起或关闭一个处于“OVERLOADED”状态的服务器实例。
当 WebLogic Server 退出时,它会返回一个退出代码。这些退出代码可由 shell 脚本或 HA 代理用来决定服务器重新启动是否必要。请参阅“管理服务器启动和关闭”中的 WebLogic Server 退出代码及故障后重新启动。
|