2.4. 정상적으로 JBoss EAP 일시 중지 및 종료

JBoss EAP는 정상적으로 일시 중단하거나 종료할 수 있습니다. 이렇게 하면 새 요청을 수락하지 않고 활성 요청이 정상적으로 완료됩니다. timeout 값은 활성 요청이 완료될 때까지 일시 중지 또는 종료 작업이 기다리는 기간을 지정합니다. 서버가 일시 중단되었지만 관리 요청이 계속 처리됩니다.

정상 종료는 서버 전체 수준에서 조정되며, 대체로 요청이 서버에 진입하는 진입점에 중점을 둡니다. 다음 하위 시스템은 정상 종료를 지원합니다.

Undertow
The undertow 하위 시스템은 모든 요청이 완료될 때까지 기다립니다.
mod_cluster
modcluster 하위 시스템은 서버가 PRE_SUSPEND 단계에서 일시 중단되고 있음을 로드 밸런서에 알립니다.
ejb3
ejb3 하위 시스템은 모든 원격 Jakarta Enterprise Beans 요청 및 MDB 메시지 전달이 완료될 때까지 기다립니다. PRE_SUSPEND 단계에서 MDB로 전달이 중지됩니다. Jakarta Enterprise Beans 타이머가 일시 중단되고 서버를 다시 시작할 때 누락된 타이머가 활성화됩니다.
트랜잭션

일시 중단되면 서버는 새 요청을 수락하지 않지만, 진행 중인 트랜잭션 및 요청이 완료될 때까지 또는 시간 초과 만료될 때까지 계속할 수 있습니다. 이는 XTS 트랜잭션과 연결된 웹 서비스 요청에도 적용됩니다.

참고

기본적으로 트랜잭션 정상 종료는 ejb 하위 시스템에 대해 비활성화되어 있습니다. 서버가 Jakarta Enterprise Beans 관련 트랜잭션이 완료될 때까지 기다린 후 일시 중단하려면 트랜잭션 정상 종료를 활성화해야 합니다. 예를 들면 다음과 같습니다.

/subsystem=ejb3:write-attribute(name=enable-graceful-txn-shutdown,value=true)
자카르타 동시성

서버는 모든 활성 작업이 완료될 때까지 기다립니다. 대기 중인 모든 작업은 건너뜁니다. 현재 Jakarta Concurrency는 지속성이 없으므로 대기 중인 작업이 손실됩니다.

서버가 일시 중단된 상태이지만 예약된 작업은 예약된 시간에 계속 실행되지만 java.lang.IllegalStateException 이 발생합니다. 서버가 다시 시작되면 예약된 작업은 계속 정상적으로 실행되며, 대부분의 경우 작업을 다시 예약할 필요가 없습니다.

배치
서버는 시간 초과 기간 내에 실행 중인 모든 작업을 중지하고 예약된 모든 작업을 지연시킵니다.
참고

현재 정상적인 종료는 새로운 인바운드 자카르타 메시징 메시지를 거부하지 않습니다. 현재 진행 중으로 예정된 Jakarta Batch 작업 및 자카르타 동시성 작업은 현재 진행될 수 있지만, 실행 시 시간 초과 창을 통과하는 자카르타 동시성 작업을 제출했습니다.

요청은 request-controller 하위 시스템에서 추적합니다. 이 하위 시스템이 없으면 일시 중지 및 재개 기능이 매우 제한되고 서버가 일시 중지되거나 종료되기 전에 서버가 완료될 때까지 기다리지 않습니다. 그러나 이 기능이 필요하지 않으면 요청-컨트롤러 하위 시스템은 작은 성능 개선을 위해 제거될 수 있습니다.

2.4.1. 서버 일시 중지

JBoss EAP 7은 서버 작업을 정상적으로 일시 중단하는 일시 중단 모드를 도입했습니다. 이렇게 하면 모든 활성 요청이 정상적으로 완료되지만 새 요청은 허용하지 않습니다. 서버가 일시 중단되면 종료하거나 실행 중 상태로 되돌리거나 일시 중단된 상태로 유지 관리를 수행할 수 있습니다.

참고

관리 인터페이스는 서버를 일시 중단하여 영향을 받지 않습니다.

관리 콘솔 또는 관리 CLI를 사용하여 서버를 일시 중단하고 다시 시작할 수 있습니다.

서버 일시 중단 상태 확인

서버 일시 중단 상태는 다음 관리 CLI 명령을 사용하여 볼 수 있습니다. 결과 값은 RUNNING,PRE_SUSPEND,SUSPEND ING 또는 SUSP ENDED 중 하나입니다.

  • 독립 실행형 서버에 대한 일시 중단 상태를 확인합니다.

    :read-attribute(name=suspend-state)
  • 관리형 도메인에서 서버의 일시 중단 상태를 확인합니다.

    /host=master/server=server-one:read-attribute(name=suspend-state)
일시 중지

다음 관리 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)
재개

resume 명령은 새 요청을 수락하기 위해 서버를 정상 실행 상태로 반환합니다. 호스트, 서버, 서버 그룹 또는 도메인 수준에서 명령을 시작할 수 있습니다. 예를 들면 다음과 같습니다.

:resume
일시 중단된 상태에서 서버 시작

서버를 일시 중단 상태로 시작하여 서버가 다시 시작될 때까지 요청을 수락하지 않도록 할 수 있습니다.

  • 독립 실행형 서버를 일시 중단 상태로 시작하려면 JBoss EAP 인스턴스를 시작할 때 --start-mode=suspend 런타임 인수를 사용합니다.

    $ EAP_HOME/bin/standalone.sh --start-mode=suspend
  • 관리형 도메인 서버를 일시 중단 상태로 시작하려면 start-mode=suspend 인수를 관리 CLI 명령에서 start 작업에 전달합니다.

    /host=HOST_NAME/server-config=SERVER_NAME:start(start-mode=suspend)
    참고

    start-mode 인수를 서버의 다시 로드재시작 작업에 전달할 수도 있습니다.

  • 관리형 도메인 서버 그룹의 모든 서버를 일시 중단 상태로 시작하려면 관리 CLI 명령에서 start-mode=suspend 인수를 start-servers 작업에 전달합니다.

    /server-group=SERVER_GROUP_NAME:start-servers(start-mode=suspend)
    참고

    서버 그룹의 reload -servers 및 restart-servers 작업에 start- mode 인수를 전달할 수도 있습니다.

2.4.2. 관리 CLI를 사용하여 서버 종료

서버를 중지할 때 적절한 시간 초과 값을 지정하면 서버가 정상적으로 종료됩니다. 명령이 실행되면 서버가 일시 중지되고 종료하기 전에 모든 요청이 완료될 때까지 지정된 시간 초과까지 기다립니다.

다음 관리 CLI 명령을 사용하여 서버를 정상적으로 종료합니다. 활성 요청이 완료될 때까지 서버에서 대기할 시간 제한 값(초)을 지정합니다. 기본값은 0 이며, 서버를 즉시 종료합니다. 값 -1 로 인해 서버가 종료되기 전에 모든 활성 요청이 완료될 때까지 무기한 대기하게 됩니다.

각 예제는 종료하기 전에 요청이 완료될 때까지 최대 60초 동안 기다립니다.

  • 독립 실행형 서버를 정상적으로 종료합니다.

    shutdown --suspend-timeout=60
  • 관리형 도메인에서 모든 서버를 정상적으로 중지합니다.

    :stop-servers(suspend-timeout=60)
  • 관리형 도메인에서 단일 서버를 정상적으로 중지합니다.

    /host=master/server-config=server-one:stop(suspend-timeout=60)
  • 서버 그룹의 모든 서버를 정상적으로 중지합니다.

    /server-group=main-server-group:stop-servers(suspend-timeout=60)
  • 호스트 컨트롤러와 관리하는 모든 서버를 종료합니다.

    /host=master:shutdown(suspend-timeout=60)
    참고

    suspend-timeout 특성은 호스트 컨트롤러 자체가 아닌 호스트 컨트롤러에서 관리하는 서버에만 적용됩니다.

2.4.3. OS 신호 사용 서버 종료

kill -15 PID 와 같은 OS TERM 신호를 보내 서버를 정상적으로 종료할 수 있습니다. 기본적으로 이 값은 관리 CLI의 shutdown --suspend-timeout=0 명령과 동일하므로 현재 처리 중인 요청을 즉시 종료합니다. 시간 제한은 서버가 종료되기 전에 요청이 완료될 때까지 대기할 최대 시간(초)을 나타내는 org.wildfly.sigterm.suspend.timeout 시스템 속성으로 구성할 수 있습니다. 값 -1 은 서버가 무기한 대기함을 나타냅니다.

중요

관리형 도메인 OS 신호는 서버를 종료하는 데 사용해서는 안 됩니다. 대신 관리 CLI를 사용하고 호스트 컨트롤러 관리를 통해 서버를 종료 해야 합니다.

JVM이 신호 처리를 비활성화하도록 구성된 경우(예: -Xrs java 인수가 JVM 옵션에 전달되었거나 전송된 신호가 전송된 신호가 아닌 경우) 신호 처리를 비활성화하도록 구성된 경우 OS 신호를 사용하는 정상 종료가 작동하지 않습니다(예: KILL 신호 전송).