ISSUE

클라이언트가 웹 페이지 호출 시 페이지가 정상적으로 작동하지 않음

JEUS Container Log 확인결과  failed because of java.net.SocketTimeoutException: Read timed out 발생

 

 

TimeOut?

프로그램이 특정 시간 내에 성공적으로 수행되지 않아서 진행이 자동적으로 중단되는 것

응답을 무한대로 기다릴 수 없기 때문에 기다리는 시간을 정해주어야 한다.

 

Read TimeOut (단위 ms)

JEUS에서 Web Connection을 통해 Web Server와 커넥션을 맺는다.

ReadTimeOut 시간을 설정하여 Web Server로부터 아무런 메시지가 오지 않는다면 커넥션에 문제가 있다고 간주하고 새 커넥션을 맺는다.

 

SvrChkTime

서버와의 연결이 정상인지 확인하기 위해 체크하는 시간을 설정하며 방화벽을 사이에 두고 연결된 JEUS와의 연결을 확인하는 데 사용된다.

 

SvrChkTime을 설정하고 서비스 요청이 없는 Ready 상태의 커넥션에 대해서 연속된 2회의 SvrChkTime에 의한 KeepAlive 요청에도 응답이 없으면 해당 커넥션에 이상이 발생했다고 인식하고 해당 커넥션을 단절하여 서비스 분배에서 제외한다.

 

 

■ http.m

*Server 절의 해당 Server에 설정한다.

설정 확인

wsadmin -i

cfg -svr


Read-timeout 산출 공식


(SvrChkTime X 2000) - 10000

 


 

JEUS Resource Leak 확인 방법


Resource Leak?

다수의 사용자가 사용하는 WAS 환경에서는 서비스가 지연되는 경우가 많다.

application 내 소스 내에서 close() 한 곳이 없다면 지속적으로 코드를 사용하게 된다.

지속되는 리소스 누수를 방지하기 위해 WAS에서 Resource Leak가 발생하면 로그 내에서 사용자에게 경고 메시지를 보내주는 설정을 할 수 있다.

여러 Resource Leak 중 DB Connection Pool 의 모든 Connection이 사용되거나 반납되지 않아 지연됐을 때의 로그와 경로를 기록한다.


Resource Leak 징후

  1. 속도 저하: 애플리케이션 작업의 긴 세션(몇 시간 또는 하루일 수 있음) 후에 UI가 느려진다.
  2. 웹 페이지가 충돌한다.
  3. 앱이 자주 일시 중지된다.
  4. JS HEAP이 시작된 것보다 높게 끝난다.
  5. 노드 크기 및/또는 리스너 크기가 증가한다.

jeus5,6 version

DB 누수 확인 명령어

find ./ -name “JeusServer*.log” | xartgs egrep “not closed|Request URI”|grep -v X

Invocation Manager 설정

Invocation manager는 엔진 컨테이너에서 서블릿/JSP, EJB Stateless Session Bean, 그리고 MDB와 같은 Stateless 메소드를 호출하는 동안 사용하는 외부 리소스(external resource)인 JDBC 커넥션Webt 커넥션을 추적하여 커넥션이 닫히지 않은 경우 모드에 따라 적절한 처리를 해준다.

Invocaiton manager는 JEUSMain.xml의 각 엔진 컨테이너 요소 하위에 하나의 **<invocation-manager-action>**으로 설정

#JEUSMain.xml
<jeus-system>
    <node>
        . . .
        <engine-container>
            . . .
            **<invocation-manager-action>
                AutoClose
            </invocation-manager-action>**
            . . .
        </engine-container>
        . . .
    </node>
    . . .
</jeus-system>

설정값 설명

NoAction 기능을 사용하지 않는다.
Warning 만약 하나의 자원이 Stateless 메소드 호출 동안 사용되었지만 반환할 때 닫지 않게 될 경우 이벤트가 컨테이너 로그에 Warning 메시지로 기록된다.
AutoClose 만약 하나의 자원이 Stateless 메소드 호출 동안 사용되었으나 반환할 때 닫히지 않는다면 자원이 자동적으로 닫힌다.

JEUS7,8

DB 누수 확인 명령어

find ./ -name “JeusServer*.log” | xartgs egrep “not closed|subject:”|grep -v X

Invocation Manager 설정

webadmin → Servers → 설정할 컨테이너 선택 → Basic → Action on Resource Leak

클라이언트 요청 시 웹 응답시간이 오래걸리는 현상 해결

> WebtoB Log 확인

 

No free slots available for the new JSV connection. jsvname='jsvname'  


 

No free slots available for the new JSV connection

> WebtoB http.m  MinProc, MaxProc 설정과 JEUS Web-Connection Thread 수가 불일치해서 발생하는 문제

 

WebtoB MinProc, MaxProc 수와 JEUS Thread 수를 동일하게 설정해주어 해결한다.

 


 

WebtoB http.m *SERVER절 확인

 

MinProc, MaxProc : 30 설정 확인

 

JEUS6

 JEUS_HOME/config/`hostname`/***_servlet_engine > WEBMiain.xml 

THread min, max 설정 확인

 

JEUS7 이상

Webadmin 접속 -> Servers -> MS(컨테이너) 선택 -> Engine텝 -> Web Connection -> webtob 리스너 선택 -> 하단에 Thread 수 확인

 

1. SSH Tunneling?

데이터 스트림을 인터넷 상에서 가상의 파이프를 통해 전달시키는 기술이다.

 

컴퓨터 네트워크에서 터널링 프로토콜을 사용하면 네트워크 사용자는 기본 네트워크가 직접 제공하지 않는 서비스에 접근하거나 제공할 수 있다.


2. SSH Tunneling for JEUS

JEUS 기술지원 시 외부 서버에서 방화벽이 열려있지 않아 webadmin page가 호출되지 않는 경우,

SSH Tunneling을 사용하여 외부 서버에서 webadmin page를 호출할 수 있다.

 

SSH는 " Secure Shell " 또는 " Secure Socket Shell " 으로, 인터넷과 같은 안전하지 않은 네트워크에서 두 대의 컴퓨터가 통신하고 데이터를 공유할 수 있도록 하는 암호화 네트워크 프로토콜이다.


3. SSH Tunneling Port Forwarding 

터널링 포트 포워딩 방식은 총 3가지가 있는데 이번 포스팅에서는 로컬 포트 포워딩으로 진행한다.

 

  • Local Port Forwarding (LPF) : 일반적인 포트 포워딩 유형, 사용자가 로컬 컴퓨터에서 다른 서버로 연결할 수 있도록 하는 설정이다. 로컬 포트 ​​전달을 사용하면 특정 웹 페이지를 차단하는 방화벽을 우회할 수 있다.
    LPF를 사용하면 로컬 컴퓨터에서 다른 서버로 연결할 수 있다.

  • Remote Port Forwarding (RPF) : 원격 포트 포워딩을 사용하려면 대상 서버의 주소와 두 개의 port 번호를 알아야 한다.
    RPF를 사용하면 원격 SSH 서버에서 다른 서버로 연결할 수 있다.
  • Dynamic Port Forwarding (DPF) : DPF를 사용하면 ssh client의 로컬에 SOCKS 프록시 서버로 전환한다.
    클라이언트가 해당 포트에 접속하면, 그 연결은 ssh server 머신으로 포워딩되며, 목적지의 dynamic port로 전달된다.

    LPF와 비슷하지만 다른 서버의 트래픽까지 모두 로컬 서버로 요청받는 게 큰 특징이다.

4. SSH Tunneling Setting

 

1. mobaXterm에 접속하여 Tunneling 아이콘을 선택한다.

2. 새로운 ssh tunneling을 생성한다.

 

3.forwarding 방법을 선택한다.

LPF
RPF
DPF

4. Forwarded Port 설정한다.

Local Server에서 호출할 임의의 포트를 설정한다.

본 포스팅에서는 20000 port를 사용한다.

5. SSH server 설정한다.

SSH Server를 설정한다.

현재 접속하려고 하는 Remote Server와 SSH Server가 같으므로 Remote Server로 설정했다.

  • SSH Server IP: 192.168.40.137
  • 접속 계정 : jeus8_1 (ssh 접속하는 계정)
  • ssh port: 22 (ssh 통신 port)

6. Remote server 설정한다.

Remote Server를 설정 후 Save 버튼을 선택한다.

  • Remote Server IP: 192.168.40.137
  • Remote port : 10000 (webadmin port)

7. SSH Tunneling 실행한다.

start 버튼으로 생성한 Tunneling을 실행한다.

여러가지 Tunneling을 생성할 경우 Naming을 통해 구분지을 수 있다.

start 버튼을 누르면 ssh Server 접속 계정 패스워드를 입력한다.


5. SSH Tunneling Test

localhost:20000/webadmin 으로 페이지 호출 시 정상 호출되는 것을 확인할 수 있다.

간혹 Application Deploy 할 때 종종 보였던 에러메시지

 

 

 

Caused by: java.lang.UnsupportedClassVersionError: org/slf4j/impl/StaticLoggerBinder : Unsupported major.minor version 51.0
 at java.lang.ClassLoader.defineClass1(Native Method)
 -
 -
 -

컴파일 된 Java Version과 JEUS Java version 이 다를 경우 나타나는 문제

 

version 51.0 👉 컴파일 버전 1.7

version 50.0 👉 컴파일 버전 1.6

version 49.0 👉 컴파일 버전 1.5

version 48.0 👉 컴파일 버전 1.4

 

1. 컴파일 시 Java Version을 JEUS Java Version에 맞춰 재 컴파일한다

2. JEUS Version을 업그레이드 한다.

Caching?

캐싱은 이미 로드된 데이터나 계산된 결과값의 복사본을 저장함으로써 처리 속도를 향상시키며,

이후 들어온 요청을 더 빠르게 처리할 수 있다.

 

Web Cache?

Client가 웹 사이트(Web Server)에 접속할 때, 정적 컨텐츠(PNG, JS, CSS 등)을 특정 위치에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하는 것이 아닌, 특정 위치에서 로드함으로써 사이트의 응답시간을 줄이고 서버의 트래픽 감소 효과를 볼 수 있다.


Session VS Cache ?

 

간단히 설명하자면 Session과 Cache의 큰 차이점은 Server의 자원사용 유무다.

Session은 서버의 자원을 사용하지만 Cache는 서버의 자원을 사용하지 않고 웹 사이트에서 처리한다.


 

WebtoB Caching Option

WebtoB는 기본적으로 IMAGE, HTML, DIR Caching을 지원한다.

HTH 프로세서에서 캐싱 관리를 하고 이미지의 개수가 많거나, 사이즈가 큰 경우 Entry 개수를 조정하여 튜닝 할 수 있다.

 

$WEBTOBDIR/config/http.m 파일 내 *NODE 절에 설정한다.

*NODE

…

CacheKey = HOST_URI,   #(default)

CacheEntry(ce) = 1024,

MaxCacheMemorySize(mcms) = 100,        # (MByte)

CacheMaxFileSize(cmfs) = 4096,             # (Byte)

CacheRefreshImage = 3600,                 # (sec.)

CacheRefreshHtml = 3600,                  # (sec.)

CacheRefreshDir = 3600,                    # (sec.)

CacheRefreshJsv = 3600,                    # (sec.)

CacheRefreshRproxy = 3600,                # (sec.)
기능 기본값 설명
CacheKey HOST_URI 캐싱하기 위한 Key 값을 생성할 때 사용할 값 설정
4.1.5.0 이상 REAL_PATH 지원
CacheEntry 128 HTH 캐시(Cache) Hash 테이블 키의 크기를 설정
MaxCacheMemorySize 100Mbyte HTH 프로세스가 캐시를 위해 사용하는 최대 메모리 사이즈를 설정
4.1.5.0 이 후 버전에서 적용 됨
CacheMaxFileSize 4096byte 캐시할 수 있는 응답(Response Header + Response Body) 하나의 최대 사이즈 설정
4.1.4.0 이전 버전은 HttpOutBufSize보다 작은 파일 Cache 
CacheRefreshHtml 3600 캐시된 응답 중 "Content-Type" "text/html"인 응답에 대한 유효시간 설정(SVRTYPE HTML 인 경우)
CacheRefreshImage 3600 캐시된 응답 중 "Content-Type" "text/html"이 아닌 응답에 대한 유효시간 설정(SVRTYPE HTML인 경우).
CacheRefreshJsv 3600 JEUS로부터 받은 응답을 캐시하는 경우 응답 유효시간을 계산하기 위한 설정, 4.1.5.0 이 후 버전에서 적용 됨
CacheRefreshRproxy 3600 Reverse Proxy로 처리된 응답을 캐시는 경우 유효시간을 계산하기 위한 설정, 4.1.5.0 이 후 버전에서 적용 됨

WebtoB admin Console에서 Cachelist 조회 및 Cache 삭제 방법

 

Cache 조회

Cache에 저장된 요청을 파일 리스트로 출력하는 기능을 가지고 있다.

 

wsadmin을 접속 후 "cachelist"를 입력하면 파일이 생성된다.

HTH가 다수일 경우 HTH마다 cachelist 파일이 생성된다. 아래의 예의 경우 HTH가 4개이다.

mspark (wsadm) [2023/12/03:16:23:11]: cachelist
Cache contents files are created in /home/webtob5_1/log/cachelist/.
 Please check the directory.


cd /home/webtob5_1/log/cachelist/

ls -al
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-0-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-1-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-2-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-3-20231203-062526.txt

Cache 삭제

캐싱 된 정보 삭제 (wsadm) : cr -a

cache ( DIR HTML IMAGE ) is refreshed

 

Trial License ?

WebtoB 기본 설치시 제공 되는 기한 제한이 없는 라이선스다.

HTH가 1개로 제한되고 Max Client가 5명인 제약이 있다.


Trial License VS Standard License VS Enterprise License

WebtoB 라이선스는 총 3가지로 Trial, Standard, Enterprise로 나뉜다.

 

Trial license은 이전 설명 처럼 WebtoB 기본 설치시 제공되는 라이선스

 

Standard license는 Trial과는 다르게 HTH 1개 이상 사용할 수 있고 WebtoB가 제공하는 대부분의 기능을 사용할 수 있다.

 

Enterprise license는 Standard license 기능에 추가적으로 Reverse Proxy Group절이 사용이 가능하고, WebDAV를 위한 HTTP Method(MKCOL, COPY, MOVE, PORPFIND)를 사용할 수 있다.

 

TechNet에서 발급 받는 DEMO LICENSE는 Enterprise License로 제공되고 기한은 2달 동안 사용이 가능하다.

2달이 지나가면 WebtoB 재기동 시 License Expired라는 에러 메시지가 출력되며 기동이 되지 않으니 주의해야 한다.


Trial License 사용시 주의할 점

엔진 설치시 제공되는 라이선스기 때문에 우선 정식 라이선스도 아닐뿐더러 데모(개발)용 라이선스도 아니기 때문에

많은 제약사항이 있다.

 

Max Client 수가 최대 5명 : 한 Client가 동시에 여러 웹페이지를 호출할 경우 정상적으로 호출되지 않을 가능성이 높다.

 

HTH 1개 제한 : 클라이언트와 서버의 업무처리 프로세스를 중계하는 프로세스로, 서버 프로세스들과의 통신을 통해 데이터의 흐름을 관리하는데 1개로 제한이 되면 다량의 데이터를 관리하기 매우 어렵다.

 

Thread 수 제한 : 웹페이지에 호출되는 파일이 많을 경우 WebtoB에서 전달하는 데이터의 유실이 발생할 수 있다. 

failed to load resource net err_socket_not_connected 라는 오류메시지를 개발자 도구에서 확인할 수 있다.

Trial 라이선스에서는 WebtoB Thread수가 제한이 되어 랜덤으로 파일을 가져오고, 페이지에 호출하기 위해 필요한 파일들을 전부 불러오지 못할 것이다.

 


해결 방법

Trial License는 거의 모든 고객사에서 사용하지 않으며 정식적인 계약을 통해 REAL License를 발급받는게 원칙이다.

 

단순 Test나 개발 용도로 사용하려면 TechNet 회원가입 후 Demo License를 발급받아 License File을 2달마다 한 번씩 교체하는 걸 권장한다.

 

https://technet.tmaxsoft.com/ko/front/main/main.do

 

Technet

효율적인 시스템 관리를 위한 기술 전문 포탈, 테크넷서비스

technet.tmaxsoft.com

 

 

1. VHOST 설정

*VHOST
v_test         **DOCROOT="/home/webtob5_1/webtob/docs/",**
               HOSTNAME = "192.xxx.xxx.xxx",
               HOSTALIAS = "www.test.co.kr",
               PORT = "80",
               **ServiceOrder = "ext,uri",**
               ERRORDOCUMENT = "403,404,503",
               METHOD = "GET, POST, -HEAD, -OPTIONS",
               #Headers = "gzip,cors_all",
               #Headers ="security,X-XSS,X-Content,strict,X-Download",
               URLRewrite = Y,
               URLRewriteConfig = "$WEBTOBDIR/config/rewrite.conf",
               LOGGING = "acc_test",
               ERRORLOG = "err_test"
  • DOCROOT : 정적 파일을 처리할 디렉토리 설정
  • ServiceOrder : ServiceOrder 순서에 따라 동작 방식 변경되므로 설정
  • ext, uri : 1. web 2. was
  • uri, ext : 1. was 2. web

2. URI 설정

해당 vhost로 들어오는 서비스는 URI에 매칭되며 검색하는데 GoToExt = Y 설정을 통해 매칭되는 ext 확장자가 있는 경우 ext절을 먼저 매칭한다.

*URI 절 설정
u_test         Uri = "/",   Svrtype = JSV, SvrName = test, VhostName = "v_test",**GotoEXT = Y**

3. VHOST 설정

WebtoB에서 정적 파일을 처리하고 특정 확장자만 JEUS에서 처리하고 싶을 경우, 해당 확장자 구문에 Options를 추가한다.

 

옵션 설명
{+|-}Cache Content의 캐시 유무(+|-)를 결정한다.
SSLRequireSSL SSL을 통한 Request만 처리하고, Non-SSL을 통한 Request는 "403 Forbidden"으로 응답한다.
SSLDenySSL Non-SSL을 통한 Request만 처리하고, SSL을 통한 Request는 "403 Forbidden"으로 응답한다.
UnSet 기본으로 설정되어 있는 sHTML, CGI, JSP 등에 대해서 해당 확장자를 EXT 절에서 Unset시킨다.
woff            MimeType = "application/font-woff", SvrType = HTML
svg             MimeType = "image/svg+xml", SvrType = HTML
xhtml           MimeType = "application/xhtml+xml", SvrType = HTML
xml             MimeType = "application/xml", SvrType = HTML
docx            MimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", SvrType = HTML
xlsx            MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", SvrType = HTML
**pptx            MimeType = "application/vnd.openxmlformats-officedocument.presentationml.presentation", SvrType = HTML, Options = "unset"**
mp4             MimeType = "application/mp4", SvrType = HTML
apk             MimeType = "application/vnd.android.package-archive", SvrType = HTML

 

적용확인

##Compile
wscfl -i hhtpm

##WebtoB 재기동
wsdown
wsboot

##adm에서 확인 
wsadmin
>>cfg -e

+ Recent posts