参考文章:https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/cnfgd/self_tuned.html#GUID-0670CD7C-AC96-46D4-AA43-1F99F21F1CC3
了解WebLogic Server如何使用线程池
WebLogic Server使用线程池执行各种类型的工作,并根据您在工作管理器中定义的规则和运行时指标对工作的执行进行优先级排序。
在早期版本的WebLogic Server中,处理是在多个执行队列中执行的。根据优先级和排序要求,在不同的队列中执行了不同的工作类别,以避免死锁。除了默认的执行队列外weblogic.kernel.default,还有一些专用于内部管理流量的预配置队列,例如weblogic.admin.HTTP和weblogic.admin.RMI。
您可以通过更改默认队列中的线程数来控制线程使用,或者配置自定义执行队列以确保特定的应用程序可以访问固定数量的执行线程,而与整个系统的负载无关。
现在,WebLogic Server使用一个线程池,在其中执行所有类型的工作。WebLogic Server根据您定义的规则和运行时指标(包括执行请求的实际时间以及请求进入和离开池的速率)对工作进行优先级排序。
公用线程池会自动更改其大小以最大化吞吐量。队列监视一段时间内的吞吐量,并根据历史记录确定是否调整线程数。例如,如果历史吞吐量统计信息表明较高的线程数增加了吞吐量,则WebLogic会增加线程数。同样,如果统计信息表明较少的线程并没有减少吞吐量,则WebLogic会减少线程数。这种新策略使管理员可以更轻松地分配处理资源和管理性能,从而避免了配置,监视和调整自定义执行队列所涉及的工作量和复杂性。
了解工作经理(也可以翻译为工作管理器)
WebLogic Server根据执行模型确定工作的优先级并分配线程,该执行模型考虑了管理员定义的参数以及实际的运行时性能和吞吐量。
管理员可以配置一组调度准则,并将它们与一个或多个应用程序或特定的应用程序组件相关联。例如,您可以将一个应用程序的一组调度准则与其他应用程序的另一组准则相关联。在运行时,WebLogic Server使用这些准则将未完成的工作和排队的请求分配给执行线程。
注意:来自所有工作管理器的工作请求由一个线程池执行;不会为每个工作管理器创建单独的线程池。
要管理应用程序中的工作,请定义以下一个或多个工作管理器组件:
公平分享要求类别
响应时间请求类别
最小线程约束
最大线程约束
容量限制
上下文请求类
请参阅请求类或约束。
您可以通过在应用程序部署描述符中引用组件名称来使用任何这些Work Manager组件来控制应用程序的性能。此外,您可以定义一个工作管理器来封装上述所有组件(上下文请求类除外;请参见示例2-3),并在应用程序的部署描述符中引用工作管理器的名称。您可以定义多个工作管理器-适当的数量取决于您在WebLogic Server上托管的应用程序中存在多少个不同的需求配置文件。
您可以在以下配置文件之一中,在域级别,应用程序级别和模块级别配置工作管理器,或使用WebLogic Server管理控制台:
config.xml—中指定的工作管理config.xml器可以分配给域中的任何应用程序或应用程序组件。
weblogic-application.xml—在应用程序级别指定的工作管理器可以分配给该应用程序或该应用程序的任何组件。
weblogic-ejb-jar.xml或— weblogic.xml在组件级别指定的工作管理器可以分配给该组件。
weblogic.xml—为Web应用程序指定的工作管理器。
示例2-1是工作管理器定义的示例。
要求课程
约束条件
卡线处理
示例2-1工作经理
<work-manager>
<name>highpriority_workmanager</name>
<fair-share-request-class>
<name>high_priority</name>
<fair-share>100</fair-share>
</fair-share-request-class>
<min-threads-constraint>
<name>MinThreadsCountFive</name>
<count>5</count&