티스토리 뷰

728x170

 포스팅에서는 JEUS8의 Managed Server의 상태 정보를 다루어 보도록 하겠습니다.


MS는 JEUS 6이하의 Container와 비슷한 역할을 수행합니다. Application Deploy 과정이나, 기동 종료 과정 또는 장애 상황에 따른 상태 정보가 변경이 됩니다. 해당 상태가 어떠한 의미를 갖는지 파악하고 이해 한다면 상황에 대한 대응이 보다 효율적일 것이라 생각합니다.


그럼 이제부터 각 상태 별 의미를 파악하고, 대응 방법에 대해 생각해 보도록 하겠습니다. 

먼저 SHUTDOWN 상태입니다.

최초 DAS(Domain Admin Server)만 기동하고 WebAdmin을 접속 했을 때 Managed Server(이하 MS)는 SHUTDOWN상태(기동되지 않은 상태)로 보입니다. 또한, RUNNING상태(정상 기동된 상태)인 MS를 정상적으로 STOP 했을 때도 SHOTDOWN으로 변경 됩니다.

이는 MS Server가 중지되어 있는 상태를 의미하며 JVM이 기동되어 있지 않으므로 어떠한 동작도 수행하지 않습니다.

대처 방안 : 장애를 유발하는 상황은 아니지만, Application을 배포하고 클라이언트 서비스를 제공하기 위해 Start 버튼을 클릭하거나, jeusadmin을 통해 start-server를 수행하여 MS를 기동합니다. 

 

다음으로 STARTING 상태입니다.

SHUTDOWN 상태에서 MS를 start하면 STARTING 상태로 변경되며, 기동 중인 상태로 아직은 서비스 할 수 없는 상태입니다.

MS는 실행 스크립트 또는 노드 매니저에 의해서 시작될 수 있습니다. 이 단계에서 MS는 엔진(WEB, EJB, JMS)을 생성하고, JEUS 서비스(보안, SCF 등)실행하고 등록된 Application deploy 등의 작업을 수행합니다.

Webadmin을 통해 기동을 수행하기 위해서는 반드시 NodeManager가 기동된 상태여야 합니다.

대처 방안 : STARTING 상태에서 발생 가능한 장애 Case로는 기동 시점의 OutOfMem 특히 JDK 1.6 이하의 Perm 영역 JDK 1.7 이상의 Meta 영역에 대한 OutOfMem 문제로 인해 무한 STARTING 상태로 대기 하는 현상이 있으며, 이럴 경우 jmap 등의 명령어를 사용하여 분석 후 적당한 Memory 증가를 반영하여야 합니다. 또한 STARTING 상태에서 Deploy가 완료되기 전 Thread Pool이 연결되어 404 등의 문제를 발생하는 경우 Deploy가 완료 된 이후 Thread Pool을 연결하도록 설정 또는 옵션을 반영하여야 합니다.

 

다음으로 STANDBY 상태입니다.

MS가 이 상태로 부팅을 완료했다면, 해당 MS에 등록된 Application들 중에 DEPLOY를 실패한 것이 있어 RUNNUNG 상태로 이동하지 못한 상태입니다. 다만, 해당 MS에 신규 Application를 DEPLOY하는 것은 가능하나 모든 Application들의 서비스는 불가능합니다. (정상 DEPLOY된 Application도 서비스 불가능하게 됩니다.)

대처 방안 : 이 상태에서 문제의 모듈을 수정하여 다시 시작하거나, -force 옵션을 주고 start 명령을 수행하면 그 모듈을 무시하고 MS를 start 할 수 있습니다.

먼저 CLI를 통해 MS 상태를 STANDBY에서 RUNNING으로 강제변경하는 방법입니다.

start-server server_name -force 명령어로 상태를 변경합니다.


다음으로 WebApplication 상태를 Deployed에서 RUNNING으로 강제변경하는 방법입니다.

① MS에 정상 application, 비정상 application을 올린 후 기동했을 때, 두 Application 모두 DEPLOED 상태로 변경됩니다.


② Server를 force 로 강제 실행합니다.


③ Server가 정상 RUNNING 상태로 변경 되며, 로그에는 정상적으로 WebtoB와 Connection을 맺고 있습니다.


④ 비정상 Application은 DEPLOED 상태, 정상 Application의 경우는 RUNNING 상태로 변하게 되며, 서비스가 가능하게 됩니다.

다음으로 RUNNING 상태입니다.

MS가 정상적으로 기동되었고 등록된 Application들도 정상적으로 서비스되는 상태입니다.

다만, 위에서 설명한 것 처럼 STANDBY 상태의 서버를 -force옵션을 통해 시작시킨 상황이라면 모든 Application이 정상적인 서비스를 하지 못하는 상황 일 수 있습니다. (정상 DEPLOY가 된 Application만 정상 서비스를 수행합니다.)


다음으로 SUSPENDED 상태입니다.

MS에서 서비스하고 있던 모든 Application을 일시 정지한 상태로 Graceful Timeout(적절한 타임아웃을 설정해서 서비스 중인 요청이 처리될 수 있도록 하는 역할입니다.)을 적용할 수 있습니다.

이 상태에서는 새롭게 Application를 추가하고 싶어도 해당 Application를 Distribute만 가능하고 시작할 수는 없는 상태입니다.

(단, Application의 서비스를 위한 Listener는 살아 있는 상태입니다.)

대응 방안 : 때때로 업무에 따라 또는 고객사에 따라 서비스를 중지하는 경우 현재 처리 중인 업무에 대한 가용성을 보장해야 하는 경우가 있습니다. 이를 처리하기 위해 Graceful Timeout을 제공하며 이럴 경우 SUSPENDED 상태로 변경되게 됩니다. 현재 처리 중인 업무가 끝나는 즉시 또는 TimeOut이 지나는 즉지 Status는 SHUTDOWN으로 변경됩니다. 업무에 따라 가용성을 보장하기 위해 적당한 TimeOut 선정은 매우 중요한 안정성 포인트 중 하나라 할 수 있습니다.

 

다음으로 SHUTTING DOWN 상태입니다.

서버가 종료되고 있는 상태입니다. Deploy된 Applicaton 을 undeploy하고 부팅할 때 실행시켰던 JEUS 서비스를 모두 종료시키는 과정입니다. 위에서 설명한 SUSPENDED 과정과 같이 Graceful Shutdown 기능을 제공합니다.

Graceful Shutdown 이란 MS를 종료할 때 현재 수행 중인 요청에 대한 처리를 보장해주는 기능입니다.

서버 종료를 요청한 시점부터는 새로운 요청을 받지 않으나, 이미 수행 중인 요청에 대해서는 정해진 시간만큼 처리가 끝나길 기다리며 이는 TimeOut을 지정하여 대기 시간을 명시할 수 있습니다.


마지막으로 FAILED 상태입니다.

Nodemanager가 down 된 상태에서 MS 가 비정상 종료(kill -9)로 죽이거나, Nodemanager 는 기동 되어있더라도 OOM 등에 의해 비정상 종료되었을 때 또는 DAS와 MS 간의 통신 불능 상태일 경우 나타나는 현상입니다.

대응 방안 : 일반적으로 가장 장애 상황에 자주 발생하는 Case입니다. 먼저 비정상 종료 상태일 경우에는 NodeManage가 재기동을 수행합니다. 다만 Need To Restart 설정이 False로 설정되어 있는 경우 재기동 실패로 인해 Failed 상태로 남아 있을 수 있습니다.

다음으로 OutOfMemError 발생 시에 Failed로 변경되었을 경우 입니다. 이럴 경우 무작정 재기동을 수행하지 말고 먼저 JEUS MS의 PID 확인 후 먼저 HeapDump와 ThreadDump를 생성합니다. 이미 추후 발생가능한 또는 재발 가능한 현상을 미연에 방지할 수 있는 대처 방안이므로 다소 시간이 걸리더라도 반드시 현재 SnapShoot 정보를 기록해 놓아야 합니다. 이후 덤프 분석기를 통해 어떠한 문제로 인해 발생하였는지 파악하는 시간을 운영자와 개발자 그리고 벤더사와 함께 리뷰하는 시간을 갖도록 해야 합니다.

마지막으로 통신 불능 상태의 경우입니다. 이런 현상은 대체로 네트워크 문제로 인해 발생됩니다. telnet을 통해 DAS가 기동되어 있는 서버의 NodeManager가 기동된 포트로 확인을 수행해 보고 연결이 되지 않을 경우 방화벽과 네트웍크 수행작을 진행합니다.

지금까지 JEUS의 다양한 Status를 확인보았습니다.

대체로 운영자께서 이러한 현상들을 많이 접하게 될 것인데 이를 실 상황에 반영하여 대처하는 습관을 기르도록 해야할 것입니다.

고맙습니다.

그리드형
댓글
  • 프로필사진 진진 안녕하세요 만약 내장 webtob를 사용해서 그림에서처럼 웹투비와의 연동하고 local로 실행을 했을 때
    연결url은 localhost:9736/웹어플리케이션ID가 되는 것인가요?
    2022.03.31 19:57
댓글쓰기 폼