2.4. 正常暂停和关闭 JBoss EAP
JBoss EAP 可以被暂停或正常关闭。这允许活动请求正常完成,而不接受任何新请求。超时值指定暂停或关机操作将等待活跃请求完成的时间。服务器暂停时,仍然处理管理请求。
安全关闭在服务器范围内协调,主要关注请求进入服务器的入口点。以下子系统支持安全关闭:
- Undertow
-
undertow
子系统将等待所有请求完成。 - mod_cluster
-
modcluster
子系统将通知负载平衡器,服务器正在PRE_SUSPEND
阶段暂停。 - EJB
-
ejb3
子系统将等待所有远程 EJB 请求和 MDB 消息发送完成。在PRE_SUSPEND
阶段停止发送到 MDB。EJB 定时器会被暂停,在服务器恢复时将激活错过的计时器。 - 事务
暂停后,服务器将不会接受新请求,但内点事务和请求可以继续,直到它们完成或超时后过期。这也适用于与 XTS 事务关联的 Web 服务请求。
注意默认情况下,对于
ejb
子系统禁用事务安全关闭。如果您希望服务器在暂停前等待 EJB 相关的事务完成,则必须启用事务正常关闭。例如:/subsystem=ejb3:write-attribute(name=enable-graceful-txn-shutdown,value=true)
- EE 一致性
服务器将等待所有活动任务完成。将跳过所有排队的作业。目前,由于 EE Concurrency 没有持久性,被跳过的排队作业将丢失。
服务器处于暂停状态时,计划的任务将继续在计划的时间执行,但会抛出
java.lang.IllegalStateException
。服务器恢复后,计划的任务将继续正常执行,而且在大多数情况下,不需要重新排期任务。- batch
- 服务器将在超时时间内停止所有运行的作业,并延迟所有计划的作业。
目前正常关闭不会拒绝新的入站 JMS 消息。目前允许继续执行由 in-light 活动调度的 EE 批处理作业和 EE 并发任务;但是,提交的 EE 并发任务会在执行时传递超时窗口。
请求由 request-controller
子系统跟踪。如果没有此子系统,则暂停和恢复功能会受到限制,并且服务器不会在暂停或关闭前等待请求完成;但是,如果您不需要此功能,则可移除 request-controller
子系统以提高小的性能。
2.4.1. 挂起服务器
JBoss EAP 7 引入了暂停模式,可正常暂停服务器操作。这允许所有活动的请求正常完成,但不接受任何新请求。服务器暂停后,可以关机,返回到运行中状态,或保持暂停状态以执行维护。
暂停服务器不会影响到管理接口。
可以使用管理控制台或管理 CLI 暂停和恢复服务器。
检查 Server Suspend 状态
可以通过下列管理 CLI 命令查看服务器暂停状态:生成的值为 RUNNING
、PRE_SUSPEND、SUS
PEND
ING 或 SUSPENDED
之一。
检查单机服务器的暂停状态。
:read-attribute(name=suspend-state)
检查受管域中服务器的暂停状态。
/host=master/server=server-one:read-attribute(name=suspend-state)
suspend
使用以下管理 CLI 命令,通过指定超时值(以秒为单位)暂停服务器,以便服务器等待活动请求完成:默认值为 0
,它会立即暂停。值为 -1
将导致服务器无限期等待所有活动的请求完成。
每个示例最多等待 60 秒以请求完成,然后再暂停。
暂停单机服务器.
:suspend(suspend-timeout=60)
暂停受管域中的所有服务器。
:suspend-servers(suspend-timeout=60)
在受管域中暂停一台服务器。
/host=master/server-config=server-one:suspend(suspend-timeout=60)
暂停服务器组中的所有服务器。
/server-group=main-server-group:suspend-servers(suspend-timeout=60)
在主机级别暂停所有服务器。
/host=master:suspend-servers(suspend-timeout=60)
恢复
restore
命令将服务器返回到正常运行状态,以接受新请求。您可以在主机、服务器、服务器组或域级别启动 命令。例如:
:resume
在 Suspended State 中启动 Server
您可以启动处于暂停状态的服务器,以便在服务器恢复之前不会接受任何请求。
若要以暂停状态启动单机服务器,可在启动 JBoss EAP 实例时使用
--start-mode=suspend
运行时参数。$ EAP_HOME/bin/standalone.sh --start-mode=suspend
若要启动处于暂停状态的受管域服务器,可将
start-mode=suspend
参数传递到管理 CLI 命令中的启动
操作。/host=HOST_NAME/server-config=SERVER_NAME:start(start-mode=suspend)
注意您还可以将
start-mode
参数传递到服务器的重新加载
和重新启动
操作。若要启动受管域服务器组中处于暂停状态的所有服务器,可将
start-mode=suspend
参数传递到管理 CLI 命令中的start-servers
操作:/server-group=SERVER_GROUP_NAME:start-servers(start-mode=suspend)
注意您还可以将
start-mode
参数传递到reload-servers
和restart-servers
操作,供服务器组使用。