티스토리 뷰
[503] Service Temporarily Unavailable에 대한 고찰
GodNR 2018. 8. 25. 21:44본포스팅은 HTTP Status 503 Service Temporarily Unavailiable에 대한 고찰입니다.
다양한 케이스를 습득해 보고 이에 대한 대응 방안을 마련해 보도록 하겠습니다.
1 503 STU(Service Temporarily Unavailable) 에러발생
1.1 Error 메시지 확인
1.2 WebtoB wsadmin 확인
[root@C:\Documents and Settings\coldapple]#wsadmin
--- Welcome to WebtoB Admin (Type "quit" to leave) ---
$$1 hny76 (wsadm): si
--------------------------------------------------------------------------------
hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt
--------------------------------------------------------------------------------
0 html ( 0) RDY 0 0 0 0 0 0 0
0 MyGroup ( 1) NRDY 1 0 0 0 0 0 0
Webtob의 BackEnd 연결이 NRDY 상태로 표시된다.
1.3 문제 원인
1) 503 Service Temporarily Unavailable Error 외부 서비스가 죽었거나 현재 멈춘 상태 또는 이용할 수 없는 서비스를 나타내며, 현재 서버가 일시적인 과부하 또는 관리(유지,보수) 때문에 요청을 처리할 수 없는 상태를 말한다.
1.4 해결 방법
1) WebtoB와 JEUS간의 연결 문제
- WebotB의 http.m과 JEUS간의 WEBMain.xml의 맵핑이 잘 되어 있는지 확인해 본다.
*WebtoB-http.m
- NODE절에서 JSVPORT 확인한다.
- WEBTOBDIR 위치 확인한다.
- SERVER절에서 맵핑 된 서버명을 확인한다.
- SERVER절에서 연결 프로세스 개수 확인
*JEUS container - WEBMain.xml
- Webtob-listner에서 webtob JSV 포트를 확인한다.
- Webtob-home에서 webtob 설치 경로를 확인한다.
- Thread-pool 개수와 webtob 프로세스 개수를 확인한다.
- Registration-id에서 server명과 같은 지 확인한다.
2 WebtoB와 JEUS에 방화벽 존재
2.1 Error 메시지 확인
2.2 WebtoB wsadmin 확인
[root@C:\Documents and Settings\coldapple]#wsadmin
--- Welcome to WebtoB Admin (Type "quit" to leave) ---
$$1 hny76 (wsadm): si
--------------------------------------------------------------------------------
hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt
--------------------------------------------------------------------------------
0 html ( 0) RDY 0 0 0 0 0 0 0
0 MyGroup ( 1) NRDY 1 0 0 0 0 0 0
Webtob의 BackEnd 연결이 NRDY 상태로 표시된다.
2.3 문제 원인
1) 방화벽 방화벽에도 세션이라는 것이 존재하여 첫 요청이 들어오면 그 패킷을 분석해서, source ip/port, destination ip/port를 세션테이블에 기록한 후 통과시키며, 관련된 응답 패킷이 오면 기존에 세션테이블을 찾아서 정상적인 패킷에 대한 응답일 경우 통과시켜준다.
여기서 세션테이블에 남아 있는 시간을 지정해 줄 수 있는대 보통 30분이며 그 시간이 지나면 해당 패킷을 deny시켜 503Error를 발생시킨다.
2.4 해결 방법
1) WebtoB 설정 추가
- http.m의 SERVER절에 해당설정 추가
........................................................................
*SERVER
Engine0 SVGNAME = jsvg, MinProc = 40, MaxProc = 40, SvrChkTime = 30
........................................................................
2) JEUS container 설정 추가
- JEUS container -WEBMain.xml의 webtob-listner에 설정 추가
........................................................................
<webtob-listener>
<listener-id>webtob1</listener-id>
<port>9900</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>10</min>
<max>10</max>
<step>1</step>
<max-idle-time>30000</max-idle-time>
</thread-pool>
<webtob-address>192.168.0.150</webtob-address>
<webtob-home>/home/jang/webtob/webtob</webtob-home>
<disable-pipe>true</disable-pipe>
<registration-id>proxy</registration-id>
<read-timeout>150000</read-timeout>
</webtob-listener>
........................................................................
3) SvrChkTime 서버와의 연결이 정상인지 확인하기 위해 체크하는 시간을 설정하며 방화벽을 사이에 두고 연결된 JEUS 와의 연결을 확인하는 데 사용된다. 마찬가지로 JEUS의 컨테이너에서도 webtob로부터의 응답을 기다리게 된다.
3 JEUS의 ThreadHang JEUS의 ThreadHang
3.1 Error 메시지 확인
3.2 WebtoB wsadmin 확인
[root@C:\Documents and Settings\coldapple]#wsadmin
--- Welcome to WebtoB Admin (Type "quit" to leave) ---
$$1 hny76 (wsadm): si
--------------------------------------------------------------------------------
hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt
--------------------------------------------------------------------------------
0 html ( 0) RDY 0 0 0 0 0 0 0
0 MyGroup ( 1) NRDY 1 0 0 0 0 0 0
Webtob의 BackEnd 연결이 NRDY 상태로 표시된다.
3.3 문제 원인
1) Thread Hang WebtoB에서 JEUS로 처리하기 위해 넘어오는 request에 대해 모든 Thread가 어떠한 작업을 하고 있는 상태이다.
3.4 해결 방법
1) Thread Hang 조치 방법 - ThreadHang인 상태를 먼저 인지한다. JEUS의 jeusadmin cosole tool에서 ti 명령어로 확인 가능하다.
- 인지 후 ThreadDump를 통하여 문제원인 분석 및 해결 해당 현상이 일어난 container의 pid를 알아내어 dump를 발생시켜 분석
<<jeusadmin `hostname` -U계정 -P비번>>
=> pidlist 입력하여 container id확인
=> <<kill -3 pid>>
=> ThreadDump 분석
# 참조
ThreadDump 생성 간략가이드
ps -ef | grep java 명령어를 통해 Dump를 생성할 java process의 PID를 확인 합니다.
* JDBC의 커넥션 풀 정보를 보여줍니다.
JEUS6
- jeusadmin 콘솔에서 “pidlist”로 PID 정보를 확인 할 수 있습니다.
infrasvr>pidlist
node or container : infrasvr, pid : 5945
node or container : infrasvr_container1, pid : 6021
node or container : infrasvr_container2, pid : 6165
- dump [PID] : 덤프를 생성합니다. Ex) dump 6021
->5초 간격으로 3번 이상 dump를 생성합니다.
*dump 위치
- SUN,HP,Linux 계열의 경우 : JeusServer 로그상에 “Full thread dump”로 시작하는 메시지로 확인 할 수 있습니다.
- IBM의 경우 부팅한(jboot 지점) 위치에 javacore.--------.txt 파일이 생성됩니다.
운영 중에 503 Service Temporarily Unavailable이 발생하면, 가장 먼저 WEB / WAS 구간의 방화벽을 먼저 확인 한후 이후 조치를 진행하게 된다.
손쉽게 확인하는 방법은 WebtoB 측에 Listen 하고 있는 JSV Port (default 9900)로 JEUS 측에서 Telnet 명령어로 확인하는 방법이다.
정상 연결이 될 경우 위 스텝에 맞추어 확인 과정을 거치면서 디버깅해 나가면 될 것이다.
'② 성능 최적화, 트러블 슈팅 > ⓣ TroubleShooting' 카테고리의 다른 글
[Memory Analyzer]HeapDump분석시 SUN Hot Spot계열 URL찾기 (1) | 2019.07.04 |
---|---|
[CPU 과점유 이슈] LINUX (0) | 2018.09.21 |
[500] Internal Server Error에 대한 고찰 (0) | 2018.08.20 |
[404] Not Found에 대한 고찰 (2) | 2018.08.18 |
[TroubleShooting] WAS 장애복구 기능 (0) | 2018.06.27 |
- Total
- Today
- Yesterday
- node.js
- kubernetes
- Docker
- wildfly
- TA
- 아키텍처
- JEUS6
- nodejs
- Architecture
- MSA
- 쿠버네티스
- SWA
- Da
- JBoss
- 마이크로서비스
- k8s
- aa
- git
- jeus
- openstack tenant
- OpenStack
- JEUS7
- aws
- SA
- openstack token issue
- API Gateway
- 오픈스택
- webtob
- apache
- 마이크로서비스 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |