Wednesday, November 12, 2014

Open API에 대한 간단한 정리 및 기술 요약

Open API에 대한 간단한 정리 및 기술 요약

Open API는 서비스, 정보, 데이터 등을 언제, 어디서, 누구나 쉽게 이용할 수 있도록 공개된 API를 말하며, 플랫폼 독립적으로 새로운 응용 서비스를 쉽게 개발할 수 있도록 합니다. 

주요 기술로는 웹서비스, SOAP, REST, XML, JSON, OAuth 등이 있으며 각 기술들에 대해 간단히 정리해 보면 다음과 같습니다.  

웹서비스 : Open API에서는 주로 사용하는 웹서비스 기술로는 SOAP (Simple Object Access Protocol) 과 REST (Representational State Template)가 사용됨

SOAP : 
HTTP, HTTPS, SMTP등을 통해 XML기반 메세지를 교환하는 프로토콜
장점 : 프록시/방화벽 영향 없고, 플랫폼/언어에 독립적, 웹서비스표준 사용(WSDL, UDDI, WS-*), 에러처리 기본제공, 분산환경에 적합
단점 : 복잡한 구조로인한 Overhead, 무겁고 느리고 개발 난이도 높음

SOA(Service Oriented Architecture) 구조에 따라 UDDI 레지스트리를 통해 웹 서비스를 등록(Publish) 하고, 탐색(Find), 바인딩(Bind) 하여 적용. 
동작방식은 서비스 요청자가 웹 서비스 요청을 SOAP 로 encoding 하여 Service Provider에게 전달하면 Service Provider는 이를 decoding 하여 적절한 서비스 로직을 태워 결과를 얻고 다시 SOAP로 encoding 하여 서비스 요청자에게 반환하는 방식으로 이루어짐. 주로 Business transaction이나 Service 상호 연동을 위해 사용됨.

REST : 
HTTP를 통해 세션 트랙킹 같은 부가적인 기능을 전송레이어 없이 전송하기 위한 간단한 인터페이스
HTTP의 기본 개념을 충실히 따름
장점 : 플랫폼/언어 독립적, 단순, 러닝커브 작음, 간결함(추가적인 메시징 계층 없음
단점 : point-to-point 통신모델로 분산 환경에 적합치 않음, 보안/정책 표준 없음. HTTP만 지원
 
ROA (Resource Oriented Architecture) 기반으로 Resource를 등록, 저장해 두는 중간매체 없이 Resource 제공자가 직접 요청자에게 Resource를 제공하는 방법을 이용. 동작 방식은 HTTP 프로토콜의 GET/PUT/POST/DELETE method를 이용하여 JSON/XML/RSS 등 다양한 형태로 Resource를 직접 실어 나름. 데이터와 UI 처리시에 사용함

XML/JSON : 
데이터를 표현하는 XML과 JSON방식의 경우 JSON은 데이터를 key-value 로 경량화 하여 표현/처리하기 때문에 데이터 크기가 줄어드는 반면 처리시간은 XML보다 많이 소요됨

OAuth :
Open API를 사용하기 위해 표준화된 인증 방식 (RFC 5849/6749, http://tools.ietf.org/html/rfc5849http://tools.ietf.org/html/rfc6749)
사용자가 API를 사용하여 서비스를 요청하기 위해 Service Provider에 등록 -> 등록이 완료되면 토큰을 발급 -> 등록된 토큰으로 서비스를 받을 URL에 접근 -> 인증이 되면 PIN을 Return -> 해당 Application에서 PIN을 입력 -> Access Token 발급하여 서비스 받음. ID/PW에 대한 노출 없이 Access Token을 통해 인증처리 됨

Wednesday, May 28, 2014

[aix] cpu deallocation

AIX CPU deallocation

1) Activate cpu deallocation 
# chdev -l sys0 -a cpuguard='enable'
check the application
# lsattr -El sys0

2) check the number of processor which try to disable
# lsdev -Cc processor

3) cpu disable
# cpu_deallocate (logical CPU number)


4) check the processor status
# lsattr -El proc##


※ Caution
You need to reboot to reactivate the disabled cpu. 
It needs more than 3 cpu to use cpuguard.

Thursday, May 8, 2014

[python] install easy_install, pip

which easy_install 2>/dev/null
    if [ $? -ne 0 ];then
        wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
        tar xvfz setuptools-0.6c11.tar.gz
        pushd setuptools-0.6c11
            sudo python setup.py install
        popd
        sudo rm -rf setuptools-0.6c11*
    fi

# running pip

$ sudo easy_install pip

[python] simplejson import

>>> import simplejson
Traceback (most recent call last):
  File "", line 1, in
ImportError: No module named simplejson
>>> import simplejson ?
  File "", line 1
    import simplejson ?
                      ^
SyntaxError: invalid syntax
>>> import json as simplejson
>>> help(json)

Help on package json:

NAME
    json - A simple, fast, extensible JSON encoder and decoder

FILE
    /usr/lib64/python2.6/json/__init__.py

DESCRIPTION
    JSON (JavaScript Object Notation) is a subset of
    JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
    interchange format.

    json exposes an API familiar to uses of the standard library
    marshal and pickle modules.

    Encoding basic Python object hierarchies::

        >>> import json
        >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
        '["foo", {"bar": ["baz", null, 1.0, 2]}]'
        >>> print json.dumps("\"foo\bar")
        "\"foo\bar"
        >>> print json.dumps(u'\u1234')
        "\u1234"

Tuesday, March 11, 2014

[middleware] WebtoB + JEUS + web application

1. WebtoB 설치

1.1 설치파일, 라이센스(license.dat)준비
1.2 라이센스 적용 : webtoB4.1\license\license.dat

2. WebToB 실행2.1 실행파일생성(wsconfig) --> 환경파일 컴파일 : wscfl -i [환경파일]
2.2 실행 : wsboot --> wsboot -w (handler가 process들을 확인하며 booting->안정적인 booting)
2.3 종료 : wsdown --> wsdown -i (질의를 던지지 않고 바로 down)
2.4 웹서비스 테스트 : http://127.0.0.1:8080/
3. WebToB 환경설정 파일 : sample.m3.1 가상홍스트 추가하기
*VHOST
vhost1 DOCROOT="D:/TmaxSoft/edu01", HOSTNAME="test.tmax.co.kr",
NODENAME="Impression32", PORT="80"
3.2 윈도우의 hosts 파일에 등록하기
D:\WINDOWS\system32\drivers\etc\hosts 파일에 등록
3.3 환경파일 컴파일 : wscfl -i sample.m
3.4 기동중인 webtob 다운 후 재부팅 : wsdown -i / wsboot
3.5 테스트
NODE절 포트 수정 확인 :
 http://127.0.0.1:80/
가상호스트 추가 확인 : http://test.tmax.co.kr:80/
4. WebtoB 관리 툴 : wdadmin
4.1 wi : 웹투비의 기본 정보 출력
4.2 ci : 접속한 클라이언트의 정보 출력
ci -s : 접속한 클라이언트의 수 출력
cfg : 웹투비의 환경설정 내용 확인
cfg -n : 노드 환경설정 내용 확인
si : 웹투비의 서비스 목록 출력
st -v : 웹투비의 서비스 상태 출력
st -p : 웹투비의 프로세스 상태 출력
repeat(r) : 웹투비의 명령을 반복적으로 수행하여 모니터링 효과를 냄
ex) r -i 2 -k 10 si
5. JEUS 설치5.1 JEUS 설치파일, 라이센스
5.2 라이센스 적용 : D:\TmaxSoft\JEUS5.0\license\license파일적용
6. JEUS 실행6.1 Two-step 부팅
: 서버실행 - jeus
: 엔진실행 - JEUS의 웹관리자
웹관리자주소 :
 http://127.0.0.1:9744/webadmin
포트번호지정 : 기본Base port(9736) + 8
포트번호변경 : bin/jeus.properties.cmd
JEUS/config/vhost.xml 의 포트번호를 변경합니다.
웹관리자 계정 : administrator
패스워드 : jeusadmin
노드선택 --> 제어 --> 부트

6.2 One-step 부팅
: 부트명령(jboot.bat) --> jeus -xml -Uadministrator -Pjeusadmin
: 종료명령(jdown.bat) --> jeusadmin [노드명] -Uadministrator -Pjeusadmin jeusexit

6.3 JEUS 웹서비스 테스트
:
 http://127.0.0.1:8088/
7. JEUS의 환경설정 파일7.1 JEUS\config\JEUSMain.xml : JEUS서버 전체의 환경 설정
7.2 EJBMain.xml : EJB엔진에 대한 환경 설정
7.3 JMSMain.xml : JMS엔진에 대한 환경 설정
7.4 WEBMain.xml : Servlet엔진에 대한 환경 설정
web.xml : 웹의 컨텍스트를 만들때 컨텍스트의 환경설정
7.5 WSMain.xml : WS엔진에 대한 환경 설정
1. JEUS에서 web application 서비스하기
1.1 물리적 Context 생성
C:\tmaxsoft\edu01
|----WEB-INF
web.xml(NODE의 servlet engine에서 가져옴)
1.2 JEUS에 Context 등록
웹관리자 로그인 --> J2EE 어플리케이션 모듈배치 --> 절대경로
--> ~~~~ --> 배치(2단계배치[J2EE어플리케이션모듈], 영구배치[J2EE어플리케이션모듈배치])
1.3 서비스 실행
:테스트를 위한 jsp파일 생성(test.jsp)
:http://127.0.0.1:8088/edu01/test.jsp
8088 : http_listener port
edu01: 배치한 모듈명
test.jsp :
실습) edu02 컨텍스트 생성, 실행 웹 어플리케이션 파일 test02.jsp --> http://127.0.0.1:8088/edu02/test02.jsp
2. JEUS container 관리2.1 생성 : 서블릿 엔진 생성(리스너ID, 리스너PORT 지정)
2.2 서블릿 엔진 테스트 --> http://127.0.0.1:8089/edu01/test.jsp
3. WebtoB와 JEUS연동하기3.1 WebtoB 설정 : sample.m 파일에 추가
3.2 JEUS 설정 : 해당 컨테이너의 webtob 리스너 연결 설정
3.3 연동 설정 테스트 --> http://127.0.0.1:80/edu01/test.jsp
4. 실 습
WebtoB의 가상호스트 vhost1 과 JEUS의 container1에 webtob2 리스너 추가, 연동.
http://test.tmax.co.kr:80/edu01/test.jsp
4.1 WebtoB 설정 추가
4.2 JEUS container1에 webtob2 리스너 추가
5. JEUS에서 서블릿 실습
5.1 서블릿 코드 작성 : HelloWorldServlet.java
5.2 컴파일 : jeus.jar 파일 경로 지정후
javac -d . HelloWorldServlet.java
5.3 JEUS에서 실행 --> http://127.0.0.1:8088/edu01/servlets/HelloWorldServlet
web.xml 문서의 WorkServlet 은 /servlets/* 로 매핑되어 있음
1. WAR 파일 생성하기1.1 패키징하기 : JeusBuilder 사용
- 파일명 : wartest.war
서블릿명 : Hello
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지어 : /helloworld
Contextpath(url에서 context호출) : /hello
1.2 JEUS에 패키징한 모듈 배치하기
- JEUS 웹관리자 --> J2EE 어플리케이션 모듈 배치 --> 모듈배치 --> ~~~ --> 배치(2단계 배치, 영구배치)
http://1273.0.0.1:8088/Hello (/Context를 정의, /Context는 모듈에 하나존재)
1.4 실 습
파일명 : wartest2.war
서블릿명 : Hello2
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지정 : /helloworld2/
Contextpath : /hello2
<결과확인>
 http://127.0.0.1:8088/hello2/Hello2 , http://127.0.0.1:8088/hello2/helloworld2/
2. DB 연동2.1 DataBase 정보 확인
- 서버 IP : 192.169.10.5
- 접속계정 : oracle/dkzkepal(아카데미)
- sql접속계정 : sqlplus edu01~edu32/edu01~edu32
- SID 명 : ORA10G
- 테이블 생성 : TmaxTest
create table TmaxTest ( name varchar(20), address varchar(20) );
- 데이터 입력 :
Insert into TmaxTest values('장동건','서울'); Insert into TmaxTest values('강호동','부산');
- commit;

2.2 드라이버 준비 및 JEUS 서버 등록
- JDBC 드라이버 : ojdbc14.zip
- 오라클 JDBC 드라이버 다운로드 사이트 :
 http://www.oracle.com/global/kr
- JEUS 등록 : D:\TmaxSoft\JEUS5.0\lib\datasource\ojdbc14.jar
2.3 DataSource 설정
- JEUS 웹관리자 -> JEUS 매니저 리소스 -> JDBC -> 새 JDBC 데이터 소스 생성
2.4 실 습
로그인 실행 테스트 : MVC
login.jsp (presentation 로직 : View)
loginCheck.jsp (business 로직 : Control)
TmaxLogin (data : Model)
아이디 : tmax 비밀번호 : 1234
***************************************************************************************************************
*** webToB
***************************************************************************************************************
*VHOST
vhost11 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "test.com",
PORT = "80"
vhost12 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "www.test.com",
PORT = "80"

* SVRGROUP
vhost11g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost11"
vhost12g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost12"

* SERVER
test SVGNAME = vhost11g, MinProc = 20, MaxProc = 20, HttpInBufSize=0
wwwtest SVGNAME = vhost12g, MinProc = 20, MaxProc = 20, HttpInBufSize=0

***************************************************************************************************************
*** JEUS
***************************************************************************************************************
container.xml 에 두개의 contextgroup을 생성하여 각각의 RegistrationID 를 test, wwwtest 로 하여 연동
***************************************************************************************************************
웹모듈(application) 추가하기
1) %JEUS_HOME%\config\노드명\JEUSMain.xml 수정
- 아래내용 추가

폴더위치
애플리케이션명
\
COMPONENT



컨테이너명

MyGroup

ISOLATED
JAR
2) JEUS 재시작
3) 해당폴더\WEB-INF/web.xml 생성 확인
4) 해당폴더\WEB-INF/jeus-web-dd.xml 생성 확인

http://www.tmaxsoft.com/xml/ns/jeus
">
/
true

false
false

-1
false
false
false

false

============================================================================================================
JDBC*Class Loading : Class.forName();
->class를 사용하는 방법

*Connection 생성방법 2가지
-DBCP를 사용안함 (Driver class를 로드하여 DB에 접근)
public Connection connectDbms() {
Connection con = null;
Properties env = new Properties(); //사용자 환경변수 객체

try {
env.load(new FileInputStream("d:\\java\\day6\\db.properties"));
Class.forName(env.getProperty("driver")); // JDBC 드라이버용 클래스 로드
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}

// 1. DB Connection 얻기
String url = env.getProperty("url");
//"jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; // JDBC 전용 URL 형식으로 기술
// thin = type4(순수java)
String user = env.getProperty("user"); //"scott";
String password = env.getProperty("password"); //"tiger";

try {
con = java.sql.DriverManager.getConnection(url, user, password);
System.out.println("****** Connect to DBMS! *******");
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return con;
}
-DBCP 사용 (server.xml, web.xml에 Container에 대한 코드 추가)
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");
}catch(NamingException ne){
ne.printStackTrace();
}
1. Servlet의 init()메소드에서 DataSource를 생성하여 인자로 넘겨 connection 가져오기
-Servlet 마다 DataSource 생성
2. ServletContextListener에서 한번만 생성하여 인자로 넘김
-DataSource 한번만 생성해도 됨(Servlet마다 DataSource를 생성하지 않음)
3. ServletContextListener에서 생성한 DataSource를 Single tone pattern으로 사용
-class에서도 single.getAttribute()로 DataSource를 얻어 올 수 있음

*statement
상속관계Statement <---------- br="" callablestatement="" preparedstatement="">(가장 보편적인 처리) (binding 변수를 통해 빠를 sql처리) (가장 특화 function, procedure호출)
->Statement
String sql = "select age from test1 where id='syh1011'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

->PreparedStatementString sql = "select age from test1 where ?=?";
PreparedStatement pstmt = con.prepareStatementStatement(sql);
pstmt.setString(1, "id");
pstmt.setString(2,"syh1011");
ResultSet rs = pstmt.executeQuery();
->CallableStatement
String sql = "select anem from salary";
PreparedStatement pstmt = conpreparedStatement(sql);
CallableStatement sctmt = con.prepareCall("{call adjust(?,?)}");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
cstmt.setString(1, rs.getString("name"));
cstmt.setFloat(2, (float)0.05);
cstmt.executeUpdate();
}
executeQeury(String sql) : SQL문이 select일 경우
executeUpdate(String sql): SQL문이 insert, update, delete문 등일 경우
execute(String sql) : SQL문을 알지 못할 경우
->장점, 단점
*ResultSet, getXXX()로 Column값 얻기, Type별로 다른 method사용
getXXX(int columnindex) : columnIndex의 값을 XXX타입으로 반환
getXXX(String columnName): columnName의 값을 XXX타입으로 반환
*Transaction 처리Transaction의 4가지 특성(ACID)
*원자성(Atomicity)
*일관성(Consistency)
*고립성(Isolation)
*지속성(Durability)
con.setAutoCommit(false); ->true : transaction을 시작하지 않겠다. ->false: transaction을 시작하겠다.
setAutoCommit(false)와 commit(), rollback()사이의 operation들에 대한 transaction 처리
-> con.commit(); -> con.rollback();
***********************************************************************************************************
#####
##### DOMAIN 절
#####
# 독립적인 WebtoB 시스템의 전반적인 환경 설정을 할 수 있다.
*DOMAIN
# 도메인 네임은 string 형식으로 31자까지 사용 가능.
# 다른 절들의 string 항목도 이와 동일하다.
webtob1

#####
##### NODE 절
#####
# WebtoB를 이루는 각 Node들에 대한 구체적인 환경 설정을 할 수 있다.
# 필수 항목으로 WebtobDir, ShmKey, DocRoot 항목을 설정해야 있다.
*NODE
# 실제 등록된 호스트의 이름을 말하며, UNIX의 경우 "uname -n" 명령으로 각 Host의 이름을 확인할 수 있다.
# Node명은 반드시 UNIX의 경우 "/etc/hosts"(Windows의 경우 C:\WINNT\system32\drivers\etc) 파일에 등록되어 있어야 한다.
# 하나의 Domain은 하나 이상의 Node로 이루어지므로, NODE절에는 최소한 하나 이상의 Node 이름이 정의되어야 한다.
WebServer
# WebtoB가 설치되어 있는 Home Directory 의 절대 경로명이다.
# 환경변수로 정의되는 WEBTOBDIR 과 동일한 값으로 설정하면 된다.
WebtobDir = "/data2/wbqam/webtob",
# Shared Memory Segment를 가리키는 값이다.
# 32768 ~ 262143 범위 내에서 다른 업무에 사용되는 키값과 충돌이 나지 않게 Shared Memory의 Key값을 설정 하면 된다.
ShmKey = 78100,
# WebtoB가 웹을 통해 서비스하는 모든 문서를 포함하는 Root Directory 의 절대 경로를 설정한다.
DocRoot="/data2/wbqam/webtob/docs",
# HTTP Request Handler) Process의 개수를 설정한다.
# Hth하나당 약 800개 이상의 Client를 수용할 수 있다.
# Default Number 설정은 1 이며, 최대 20개 까지 지정할 수 있다.
Hth = 2,
# WebtoB가 Listen하는 Port를 지정한다.
# 일반적으로 Web Server는 80 Port 이용하므로 설정하지 않을경우 default 값으로 80으로 설정된다.
# 최대 100개의 포트를 동시에 지정하여 사용할 수도 있다.
# Listen 항목과 동시에 운영할 수 없으며, Port보다 Listen항목에서 지정되는 Port가 우선순위가 높아
# 동시에 지정하면 Port항목은 무시 된다.
Port = "8100,8200",
##### User, Group 설정
# WebtoB에서 시스템의 보안을 위하여 WebtoB의 실제 실행 Process에 대한 권한 설정을 할 수 있다.
# 설정한 권한으로 Process가 실행되기 위해서는 반드시 root 권한으로 WebtoB를 실행해야 한다.
# 설정된 Group의 권한으로 WebtoB가 요구를 수행하게 된다.
# Client 요구를 수행하기 위하여 Group 설정을 권장한다.
# Group 설정은 Unix계열의 OS에서만 지원한다.
Group = "nobody",
# 설정된 User의 권한으로 WebtoB가 요구를 수행하게 된다.
# Client 요구를 수행하기 위하여 User 설정을 권장한다.
# User 설정은 Unix계열의 OS에서만 지원한다.
User = "nobody",
# 관리자의 정보를 나타낸다.
# 관리자에게 연락할 수 있는 e-mail address를 설정할 수 있다.
Admin = "wbqam@tmax.co.kr",
# Http Response Header의 host name field에 기록될 값을 설정할 수 있다.
HostName = "www.tmax.co.kr",
# 해당 서버의 HostName를 적어 준다.
# 특별히 $(NODENAME)이라고 적어주면, 자동으로 해당 서버의 HostName가 적용된다.
# 한글 노드명을 사용하거나 긴 노드명을 사용할 경우 NodeName 을 설정한다.
NodeName = "$(NODENAME)"
# MultiNode 설정시 각 Node들 간의 연결 Port 번호를 지정한다.
# MultiNode 설정시 반드시 지정해 주어야 한다.
# default 설정은 7777 번이다.
# NodePort = 7777,
# WebtoB와 Servlet 수행 Server간의 연결 Port 번호를 지정한다.
# default 설정은 9999 번이다.
JSVPort = 9100,
# Multi Node 구성시 Node 관리 차원에서 Node간 통신을 위한 Port번호를 지정한다.
# 위의 NodePort와는 달리 이것은 관리 Process 중 하나인 wsracd Daemon에서 사용하는 Port번호이다.
# default 설정은 3333 번이다.
RacPort = 4455,
# WebtoB는 Server 내부 Caching의 한 Entry의 크기로서 기본단위는 Kbyte이다.
# default size는 128 Kbyte 이다.
CacheSize = 128,
# Cache의 총 Hashing Key 엔트리 개수를 설정한다.
# default 개수는 128개 이다.
CacheEntry = 256,
# HTML file에 대한 cache refresh time을 설정한다.
# default 설정은 0 second 이다.
CacheRefreshHtml = 60,
# DirIndex에 대한 cache refresh time을 설정한다.
# default 설정은 0 second 이다.
CacheRefreshDir = 60,
# 사용자가 웹사이트에 접속한 후, 다른 웹페이지를 읽어 들이기 위해 곧 다시 접속을 시도 할 경우
# 불필요한 시간 지연이 없도록 하려면 이 항목을 지정함으로써 접속을 단절하지 않고 유지할 수 있다.
KeepAlive = Y,
# 커넥션 설정후 일정 개수의 요구는 커넥션을 유지한 상태로 서비스를 하고 커넥션을 끊도록 하는데,
# 커넥션을 끊기 전에 들어주는 요구의 개수를 지정한다.
# default 설정은 9999 이다.
KeepAliveMax = 10,
# 하나의 Client가 불필요하게 커넥션을 오래 잡고 있는 경우를 막기 위해
# 다음 Request 까지 일정 시간 이상이 되면 커넥션을 끊을 수 있도록 설정할 수 있다.
# default 설정은 60 second 이다.
KeepAliveTimeout = 30,
# 사용자의 최대 접속시간을 지정한다.
# default 설정은 300 second 이다.
Timeout = 100,
# WebtoB를 통해 사용자별로 동시에 서비스 하려는 경우 설정한다.
# 값이 설정이 되면 각 사용자의 directory를 찾아서 서비스 한다.
UserDir = "public_html",
# WebtoB를 통해 응용 프로그램을 바로 호출하는 경우 해당 프로그램이 위치할 디렉토리를 설정한다.
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
AppDir = "/data2/wbqam/webtob/ap",
##### Log Directory
# WebtoB에서는 기본적으로 Log 정보를 남기기 위하여 설정한다.
# 환경파일에 따로 설정하지 않을경우 WEBTOBDIR/log 디렉토리에 기록이 된다.
# 로그가 기록될 디렉토리가 없을경우 booting시 에러가 나므로, 실제 존재하는 디렉토리여야 한다.
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
# 시스템 메시지가 기록될 Directory의 경로명을 설정한다.
# Default Path는 (WEBTOBDIR)/log/syslog 이다.
SysLogDir = "/data2/wbqam/webtob/log/syslog",
# 사용자 메시지가 기록될 Directory의 경로명을 설정한다.
UsrLogDir = "/data2/wbqam/webtob/log/usrlog",
# Service Directory로 요청이 올대 기본적으로 서비스되는 파일 이름을 설정한다.
# 기본 설정은 index.html 이다.
IndexName = "indexname.html",
# Service Directory에 요구를 보낼 때의 동작을 지정한다.
# Options에 지정할수 있는 서비스와 기능들을 아래와 같다.
# Service: HTML, CGI, SSI, PHP, JSV
# Function: INDEX, INCLUDE
# 모든 기능을 이용하려면 "+ALL", 모든 기능을 이용하지 않으려면 "-ALL"을 설정할 수 있다.
Options = "+Index",
# Client가 보내는 Request Method에 대한 정의를 할 수 있다.
# HEAD, GET, POST, OPTIONS 등을 설정을 할 수 있으며, 사용하고 싶지 않을경우 "-Option" 으로 설정하면 된다.
# 참고로 HTTP Method CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE 등이 있다.
Method = "GET,POST,HEAD,-OPTIONS",
# 여러개의 IP Address를 가진 Server에서 자신이 원하는 IP로만 서비스 하기를 원할때 지정한다.
# 여러개의 아이피와 포트를 지정할 수도 있다.
# Port항목과 Listen 항목을 동시에 지정하는 경우 Port에 지정한 Port는 무시된다.
# Listen="192.168.1.43:8300",
# DIRINDEX절에서 설정하는 디렉토리 인덱스의 이름을 적어준다.
DirIndex = "diridx_def"
# 접속 Client가 사용 언어를 지정하지 않았을 경우
# Server쪽에서 지정된 언어 순서대로 Multiview request 등의 처리가 이루어지도록 한다.
LanguagePrio = "kr",
# LOGGING절에서 설정하는 Logging Name을 설정하며, 해당 설정에 해당하는 Log를 남기게 되는 것이다.
Logging = "log1",
# LOGGING절에서 설정하는 Logging Name을 설정하며, 해당 설정에 따라 Error Log를 남기게 된다.
ErrorLog = "log2",
# WebtoB에서 특정 정보를 읽어 들일 필요가 있는 경우 이용된다.
# EnvFile = "WebtoB.env",
# WebtoB에서 SSL을 이용할 때 Y 로 설정한다.
# default 설정은 N 이다.
# SslFlag = Y,
# SslFlag = Y 상태일때 적용이 되며, SSL절에 설정한 Ssl Name를 지정한다.
# SSLNAME = "ssl_def",
# 서버 프로세스에 속한 노드의 최대 동시 접속자 수를 설정한다.
MaxUser = 4000,
# WebtoB 내부 프로세스의 접근권한을 설정한다.
# Default 설정은 0700 이다.
# IpcPerm = 0744,
# 접속을 기다리는 큐(queue)의 길이를 제한하는 것으로,
# 서버가 대량의 접속 시도를 한꺼번에 날려주는 TCP SYN해킹을 당하고 있다면 유용하게 사용 될수 있을 것이다.
# default 설정은 511 이다.
ListenBacklog = 100,
# TCP 전송 Buffer의 크기를 설정하는 것으로, 이 항목을 이용하면 특정한 환경에서 동작 속도를 향상시킬 수 있다.
# default 설정은 0이며, 0의 값은 OS default값을 사용함을 의미한다.
SendBufferSize = 4096,
# 클라이언트의 요청시 HTTP 프로토콜을 통해 서버가 제공할 수 있는 Request Body 크기를 바이트 단위로 정의하는 것으로,
# 0의 값은 크기에 제한이 없음을 의미한다.
# default 설정은 0 bytes 이다.
LimitRequestBody = 20000,
# 클라이언트의 요청시 허용되는 HTTP Request header field의 수를 설정한다.
# 0의 값은 제한이 없음을 의미한다.
# default 설정은 100 이다.
LimitRequestFields = 20,
# 클라이언트의 요청시 허용되는 각 HTTP Request header field의 크기를 설정한다.
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 bytes 이다.
LimitRequestFieldSize = 300,
# 클라이언트의 요청시 허용되는 HTTP Request line의 최대 크기를 설정한다.
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 이다.
LimitRequestLine = 4000,
# HTTP 응답 헤더의 Server에 관한 정보를 어떻게 다룰지 결정한다.
# "Off", "Prod[uctOnly]", "Min[imal]", "OS", "Full", "Custom=xxx/x.x" 등을 설정할 수 있다.
ServerTokens = "Minimal",
# HTTP 요청으로부터 해당 Server와 Service를 결정할때, URI절과 EXT절의 우선순위를 결정한다.
# Vhost절에 이 항목이 설정되지 않은 경우는 Node절에 설정된 값이나 기본값을 Vhost가 따르게 된다.
# default 설정은 "uri,ext" 이다.
ServiceOrder = "ext,uri",
# HTTP header의 Content-Type에 character set 설정이 없는 Request에 응답에 추가될 character set의 이름을 설정한다.
# "On"(ISO-8859-1), "Off"(설정안함), "_charset_"(사용자 기술) 중 하나를 설정할 수 있다.
# 여러 절에서 적용되는 우선 순위는 Node < Vhost < SvrGroup < Directory 순이다.
DefaultCharset = "Off",
# MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.
# Default Content-Type은 SvrGroup, Vhost, Node절의 순으로 결정된다
DefaultMimetype = "text/html",
# Web Server에서 내부 프로세스간 IPC통신을 하기 위해서 기본적으로 특정 포트(6666)를 사용하는데,
# IPCBasePort항목을 통해 해당 포트를 변경할 수 있다.
# 현재 Windows에서만 지원된다. (UNIX의 경우 PIPE통신)
# default 설정은 6666 이다.
# IpcBasePort = 6667,
# EXPIRES절의 설정한 Expires이름을 설정한다.
Expires = "exp11, exp12, expdef1",
# TCPGW 절에 설정한 tcpgw 이름을 설정한다.
TcpGW = "tcpgw_full",
# ERRORDOCUMENT절에 설정한 ErrorDocument 이름을 설정한다.
ErrorDocument = "404",
# WebtoB 내부 프로세스 통신을 위한 socket생성 디렉토리를 설정한다.
# default 설정은 $WEBTOBDIR/path 이다.
PathDir="/data2/wbqam/webtob/path",
##### 멀티노드 구성시 아래와 같이 추가적으로 노드를 정의한다.
#tmaxi1
# WEBTOBDIR="/data/wbqam/webtob",
# SHMKEY = 78100,
# DOCROOT="/data/wbqam/webtob/docs",
# APPDIR="/data/wbqam/webtob/ap",
# PORT = "8100",
# HTH = 2,
# LOGGING = "log5",
# ERRORLOG = "log6",
# HostName = "www.tmax.co.kr",
# RACPORT = 4455,
# NodePort = 7787
**********************************************************************************************************
1. WebToB의 가상호스트 설정
1.1 환경설정파일(sample.m)을 추가, 컴파일
*VHOST
vhost1 HostName="test.tmax.co.kr",
DOCROOT="C:/TmaxSoft/edu02", # 웹서비스 파일 위치 지정
NODENAME="respect04",
PORT="80", # URL 이름이 같은 경우 포스번호를 다르게 설정해야 함. 현재는 호스트네이임이 다르므로 포스번호가 같아도 상관없다
IndexName="test.html", # Wellcome page 설정
KeepAlive=Y, # KeepAlive와 KeepAliveTimeout은 같이 사용해야 함(set 구성)
KeepAliveTimeout=30

1.2 윈도우 hosts 파일에 가상호스트 설정 (실제 서비스할 경우 DNS서버에 추가)
(C:\WINDOWS\system32\drivers\etc\hosts)
추가 => 127.0.0.1 test.tmax.co.kr
1.3 기동 후 테스트
1) sample.m 컴파일(wscfl -i sample.m)
2) ws 재기동
3) C:/TmaxSoft/edu02에 test.html 추가
4) 웹에서 test.html 확인 url=http://test.tmax.co.kr
# 알아둡시다
- sample.m에서 정의된 *NODE는 localhost(127.0.0.1)이다.
- sample.m에서 정의되지 않은 기본설정 확인은 wsadmin에서 cfg명령어로 확인한다
cfg -n : Node 환경설정
cfg -vh : vhost 환경설정 (sample.m에 *VHOST가 정의 되었을 때만 사용)
- 기본설정을 변경할 경우 cfg에서 보여진 명령어를 sample.m에 재정의한다
- DOCROOT의 디렉토리 구분은 ''이 아니라 '/'로 구분한다
2. WebToB의 가상호스트와 JEUS연동설정
2.1 가상호스트를 인식 시키기 위한 WebToB설정
sample.m에 정의
*SVRGROUP
v_jsvg NODENAME = "respect04", SVRTYPE = JSV, VHOSTNAME="vhost1" #가상호스트에서 인식
*SERVER #컨테이너 그룹명과 연동정의 및 몇개의 프로세스 사용할 것인가 정의
v_MyGroup SVGNAME = v_jsvg, MinProc = 10, MaxProc = 20 # 가상호스트 MyGroup
2.2 JEUS 설정
2.2.1 웹관리자 이용 시
1) 새 웹 리스너 생성
경로 : 서블릿엔진 - MyGroup - 웹리스너
2) 설정
- Listener Id : alias 명
- PORT : 기존 webtob 포트번호와 다르게 설정
- 스레드풀 : max, min은 sample.m *SERVER에서 정의한 내용과 동일하게 처리
- Webtob Address : 해당 Listener와 연결되는 WebtoB서버의 IP어드레스
- Registration Id : sample.m *SERVER에서 정의한 그룹ID
- Webtob Home : C:\TmaxSoft\WebtoB4.1 => webtob가 설치되어 있는 home 디렉토리
2.2.2 서블릿 WEBMain.xml 정의

v_webtob1
9901

10
20

http
v_MyGroup
C:\TmaxSoft\WebtoB4.1

3. 컨테이너 추가 (웹관리자) 후 WebToB 연동
3.1 새 엔진 컨테이너 생성
- Name : container3
- ID, BasePort
- 서블릿 엔진 : engine2
- 리스너 ID/서버 채널 이름 : http2 (#http 리스너를 반드시 추가하세요.)
- 리스너/서버 채널 포트 : 8087
3.2 새 어플리케이션 모듈 배치 - 모듈 선택
- 2단계 배치
- 영구배치는 J2EE 어플리케이션 모듈 배치에서 영구배치를 클릭 시
에디터아이콘을 선택하여 영구 모듈 디플로이 컨테이너대상을 설정
3.3 추가한 컨테인너 서블릿 WEBMain.xml 정의

http://www.tmaxsoft.com/xml/ns/jeus
">

MyGroup


http2
8087
8192

10
20


v_webtob1
9901

10
20

http
v_MyGroup
C:\TmaxSoft\WebtoB4.1


4. 서블릿 작성/실행하기
4.1 HelloWorldServlet.java 작성
==============================================================================
package tmax;
import! java.io.*;
import! javax.servlet.*;
import! javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("");
out.println("");
out.println("Hellow World Sample");
out.println("");
out.println("");
out.println("

Hello World!!!

");
out.println("");
out.println("");
out.close();
}
}
================================================================================
4.2 컴파일
C:\TmaxSoft\edu01\WEB-INF\classes>javac -d . H*.java
4.3 실행
http://127.0.0.1:8088/edu01/servlets/tmax/HelloWorldServlet

4.4. web.xml에 서블릿명 추가(HelloWorld)

HelloWorld
tmax.HelloWorldServlet
-1


HelloWorld
/helloworld/

4.5 실행
http://127.0.0.1:8088/edu01/HelloWorld

5. WebToB에서 서블릿을 실행하기 위한 url 설정
5.1 sample.m 파일 수정
*URI
uri2 Uri = "/edu01/", Svrtype = JSV #url에 edu01이 들어간 문자는 서블릿을 실행하게 한다
5.2 실행

Monday, March 3, 2014

[linux] performance analysis

  1. iostat
    1. 별도의 설치 필요없음, 물리적 드라이버 별로 기본적인 Disk Read/Write 볼 수 있음
    2. 한 개 이상의 디스크 드라이브에 대한 입출력 통계와 CPU 활용량
      arg-cpu
      %user
      %nice
      %system
      %iowait
      %steal
      %idle
      마지막 재부팅 이후의 평균 CPU 활용량어플리케이션 등 사용자 모드에 소모된 시간nice를 사용하여 스케줄링 우선순위가 바뀐 프로세스에 소모된 시간시스템(커널)이 사용한 시간디스크I/O 요청 때문에 CPU가 대기한 시간다른 가상 CPU가 서비스하는 동안 비자발적으로 대기한 시간대기한 시간
      Device
      tps
      kB_read/s
      kB_wrtn/s
      kB_read
      kB_wrtn
      디바이스 구분초당 전송(입출력) 수초당 읽혀진 KB (Blk일 경우 512바이트 블록수)초당 쓰여진 KB (Blk일 경우 512바이트 블록수)지금까지 읽혀진 KB(Blk일 경우 512바이트 블록수)지금까지 쓰여진 KB(Blk일 경우 512바이트 블록수)
  2. vmstat
    1. 별도의 설치 필요없음, 시스템의 리소스 상황(CPU, I/O, Memory)을 모니터링 할 수 있음 (http://jikime.tistory.com/286)
    2. vmstat(옵션없음) - 마지막 부팅 이후의 평균값
    3. vmstat 2 10 => 2초 간격으로 10회 정보 갱신
      procsmemoryswapiosystemcpu
      rbwswpdfreebuffcachesisobiboincsussyidwa
      현재 실행중인 프로세스의 수(CPU 접근 대기 중인 실행 가능 프로세스 수)인터럽트가 불가능한 sleep 상태에 있는 프로세스의 수 (I/O 처리를 하는 동안 블럭 처리된 프로세스)강제로 스왑아웃된 프로세스사용하고 있는 swap 메모리 양(사용된 가상 메모리 용량)사용가능한 메모리 양버퍼로 사용되고 있는 메모리 양캐시로 사용되고 있는 메모리 양swap in(디스크에서 메모리로 스왑된 메모리 용량)swap out(디스크로 스왑되어 나간 메모리 용량)초당 블럭 디바이스로 보내는 블럭 수(블록 장치로 보내진 블록)초당 블럭 디바이스로부터 받은 블럭 수(블록 장치에서 받아온 블록)초당 인터럽트 되는 양초당 context switch되는 양사용자의 CPU 사용 시간 비율(CPU가 사용자 수준 코드를 실행한 시간, 백분율 단위)시스템의 CPU 사용 시간 비율(CPU가 시스템 수준 코드를 실행한 시간, 백분율 단위)CPU idle time(백분율 단위)입출력 대기
  3. top
    1. 별도의 설치 필요없음, CPU 점유 프로세스들을 실시간으로 조회하는 명령어 (http://weezzle.net/1360)
    • 1줄 top : 시스템의 전반적 상태(가동시간 등)
    • 2줄 Tasks : 프로세스들의 상황
    • 3줄 CPU : CPU의 상황
    • 4줄 Mem : 메모리 상황
    • 5줄 Swap : 스왑 메모리 상황
    • 6줄
      PID
      USER
      PR
      NI
      VIRT
      RES
      SHR
      S
      %CPU
      %MEM
      TIME+
      COMMAND
      프로세스 ID프로세스를 실행시킨 사용자 ID프로세스의 우선순위NICE 값가상 메모리의 사용량(SWAP+RES)현재 페이지가 상주하고 있는 크기(Resident Size)분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합프로세스의 상태(Sleeping, Running, sWapped out process, Zombies)프로세스가 사용하는 CPU의 사용율프로세스가 사용하는 메모리의 사용율CPU TIME, hundredths실행된 명령어
  4. free
    1. 시스템의 실제메모리와 스왑메모리에 대한 사용현황을 확인할 수 있는 명령어 (http://blog.naver.com/PostView.nhn?blogId=jwmoon74&logNo=100174011942)
    • 1줄 Mem : 시스템의 물리적인 메모리에 대한 사용량을 각 필드 단위로 표시
      total
      used
      free
      shared
      buffers
      cached
      전체 메모리의 용량으 Kbyte단위(default)로 표시현재 시스템에서 사용중인 메모리의 량을 Kbyte 단위로 표시현재 시스템에서 사용중이지 않은 메모리의 량을 Kbyte단위로 표시현재 시스템에서 공유한 메모리의 용량을 표시현재 시스템에서 buffering된 메모리의 량을 표시현재 시스템에서 caching된 ㅣ메모리의 량을 표시
    • 2줄 -/+ buffers/cache : 현재 캐시 메모리에서 버퍼링된 사용량을 표시(used/free)
    • 3줄 Swap : 서버설치 시에 결정한 스왑메모리의 량, 스왑메모리는 디스크의 일부분을 메모리로 잡아서 설정되기 때문에 스왑메모리가 많이 사용되고 있다는 것은 시스템의 전체적인 속도가 떨어진다는 것을 의미하며 지속적으로 스왑메모리가 사용된다는 것은 결국 실제 메모리를 증설해야 한다는 것이다.
      total
      used
      free
      시스템의 전체 스왑메모리의 량을 표시전체 스왑메모리 중에서 현재 사용중인 스왑메모리의 량을 표시전체 스왑메모리중에서 사용되지 않고 남아 있는 메모리의 량
  5. iotop
    1. 별도의 설치 필요함, Python 2.5+, linux kernel 2.6.20+ 이 2개의 프로그램이 기본적으로 설치되어 있어야 함
      TIDPRIOUSERDISK READDISK WRITESWAPINIOCOMMAND
  • /proc 파일 리스트 : meminfo, diskstats, vmstat
  • CPU - perf, top, htop
    Memory - valgrind, smem
    Disk I/O - nmon, bonnie, sysstat
    Network - netperf, iftop, netstat

Friday, February 14, 2014

[java] thread dump 분석 example

아래의 정보를 확인해 보시면, com/aintop/db/PoolMan에서 lock 상태이며, lock 발생하는 Thread인 webtob1-hth0(localhost:9900)-w023이하로 26개의 Thread들이 wait lock 상태로 대기중입니다. webtob1-hth0(localhost:9900)-w023 Thread는 /jsp/setting/UserDetailUpdate.jsp 수행이후로 at jeus_jspwork/_jsp/_setting/_500_UserDetailUpdate_5fjsp._jspService(_500_UserDetailUpdate_5fjsp.java:141) socketRead상태로 DB로부터 응답을 기다리고 있는 상태입니다. /jsp/setting/UserDetailUpdate.jsp 에 대한 SQL 확인이 필요합니다. 감사합니다. 세부내용은 다음과 같습니다. 1. lock 발생하는 Thread인 webtob1-hth0(localhost:9900)-w023이하로 26개의 Thread들이 wait lock 상태로 대기중 2LKMONINUSE sys_mon_t:0x00000001276B7E50 infl_mon_t: 0x00000001276B7EA0: 3LKMONOBJECT com/aintop/db/PoolMan@070000001764EBB0/070000001764EBC8: owner "webtob1-hth0(localhost:9900)-w023 [container1-45]" (0x0000000123E3AE00), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER "webtob1-hth0(localhost:9900)-w000 [container1-22]" (0x0000000124302700) 3LKWAITER "webtob1-hth0(localhost:9900)-w001 [container1-23]" (0x0000000124350800) 3LKWAITER "webtob1-hth0(localhost:9900)-w004 [container1-26]" (0x000000012443CC00) 3LKWAITER "webtob1-hth0(localhost:9900)-w005 [container1-27]" (0x000000012448B100) 3LKWAITER "webtob1-hth0(localhost:9900)-w006 [container1-28]" (0x00000001244DA700) 3LKWAITER "webtob1-hth0(localhost:9900)-w017 [container1-39]" (0x0000000123E4AE00) 3LKWAITER "webtob1-hth0(localhost:9900)-w019 [container1-41]" (0x0000000123F47500) 3LKWAITER "webtob1-hth0(localhost:9900)-w021 [container1-43]" (0x00000001249CC000) 3LKWAITER "webtob1-hth0(localhost:9900)-w022 [container1-44]" (0x0000000123E31F00) 3LKWAITER "webtob1-hth0(localhost:9900)-w025 [container1-47]" (0x0000000124737A00) 3LKWAITER "webtob1-hth0(localhost:9900)-w028 [container1-50]" (0x000000012496E100) 3LKWAITER "webtob1-hth0(localhost:9900)-w036 [container1-58]" (0x0000000124E1E100) 3LKWAITER "webtob1-hth0(localhost:9900)-w037 [container1-60]" (0x0000000124E6C800) 3LKWAITER "webtob1-hth0(localhost:9900)-w041 [container1-63]" (0x0000000124FA8200) 3LKWAITER "webtob1-hth0(localhost:9900)-w042 [container1-67]" (0x0000000124FF7900) 3LKWAITER "webtob1-hth0(localhost:9900)-w054 [container1-75]" (0x00000001253FB900) 3LKWAITER "webtob1-hth0(localhost:9900)-w059 [container1-79]" (0x000000012522F700) 3LKWAITER "webtob1-hth0(localhost:9900)-w062 [container1-82]" (0x00000001256F2500) 3LKWAITER "webtob1-hth0(localhost:9900)-w068 [container1-90]" (0x000000012593B900) 3LKWAITER "webtob1-hth0(localhost:9900)-w077 [container1-99]" (0x0000000125C72600) 3LKWAITER "webtob1-hth0(localhost:9900)-w079 [container1-101]" (0x0000000125D11E00) 3LKWAITER "webtob1-hth0(localhost:9900)-w080 [container1-102]" (0x0000000125D60000) 3LKWAITER "webtob1-hth0(localhost:9900)-w087 [container1-109]" (0x0000000125FD8A00) 3LKWAITER "webtob1-hth0(localhost:9900)-w088 [container1-110]" (0x0000000126047100) 3LKWAITER "webtob1-hth0(localhost:9900)-w090 [container1-112]" (0x00000001260E4600) 3LKWAITER "webtob1-hth0(localhost:9900)-w093 [container1-115]" (0x00000001261D4600) 2LKMONINUSE sys_mon_t:0x0000000127F4AAA0 infl_mon_t: 0x0000000127F4AAF0: : 2LKREGMON Thread public flags mutex lock (0x0000000123DA6540): 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY "webtob1-hth0(localhost:9900)-w023 [container1-45]" (0x0000000123E3AE00) 1. lock 발생하는 Thread at jeus_jspwork/_jsp/_setting/_500_UserDetailUpdate_5fjsp._jspService(_500_UserDetailUpdate_5fjsp.java:141) 호출이후에 socketRead상태로 DB로부터 응답을 기다리고 있는 상태입니다. /jsp/setting/UserDetailUpdate.jsp 에 대해서 SQL 확인이 필요합니다. Thread Name webtob1-hth0(localhost:9900)-w023 [container1-45] State Waiting on condition Monitor Owns Monitor Lock on com/aintop/db/PoolMan@070000001764EBB0/070000001764EBC8 Java Stack at java/net/SocketInputStream.socketRead0(Native Method) at java/net/SocketInputStream.read(SocketInputStream.java:155(Compiled Code)) at oracle/net/ns/Packet.receive(Packet.java:308(Compiled Code)) at oracle/net/ns/DataPacket.receive(DataPacket.java:106(Compiled Code)) at oracle/net/ns/NetInputStream.getNextPacket(NetInputStream.java:324(Compiled Code)) at oracle/net/ns/NetInputStream.read(NetInputStream.java:268(Compiled Code)) at oracle/net/ns/NetInputStream.read(NetInputStream.java(Compiled Code)) at oracle/net/ns/NetInputStream.read(NetInputStream.java:107(Compiled Code)) at oracle/jdbc/driver/T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124(Compiled Code)) at oracle/jdbc/driver/T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80(Compiled Code)) at oracle/jdbc/driver/T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137(Compiled Code)) at oracle/jdbc/driver/T4CTTIfun.receive(T4CTTIfun.java:350(Compiled Code)) at oracle/jdbc/driver/T4CTTIfun.doRPC(T4CTTIfun.java:227(Compiled Code)) at oracle/jdbc/driver/T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:383(Compiled Code)) at oracle/jdbc/driver/T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:776(Compiled Code)) at oracle/jdbc/driver/T4CConnection.logon(T4CConnection.java:432(Compiled Code)) at oracle/jdbc/driver/PhysicalConnection.(PhysicalConnection.java:553(Compiled Code)) at oracle/jdbc/driver/T4CConnection.(T4CConnection.java:254(Compiled Code)) at oracle/jdbc/driver/T4CDriverExtension.getConnection(T4CDriverExtension.java:32(Compiled Code)) at oracle/jdbc/driver/OracleDriver.connect(OracleDriver.java:528(Compiled Code)) at java/sql/DriverManager.getConnection(DriverManager.java:572(Compiled Code)) at java/sql/DriverManager.getConnection(DriverManager.java:165) at com/aintop/db/PoolMan.createConnection(PoolMan.java:354) at com/aintop/db/PoolMan.getConnection(PoolMan.java:200(Compiled Code)) at com/aintop/db/DBHandler.dbOpen(DBHandler.java:329(Compiled Code)) at com/aintop/db/DBHandler.executeSelect(DBHandler.java:389(Compiled Code)) at jeus_jspwork/_jsp/_setting/_500_UserDetailUpdate_5fjsp._jspService(_500_UserDetailUpdate_5fjsp.java:141) at com/hs/hip/servlet/HIJspPage.service(HIJspPage.java:154(Compiled Code)) at javax/servlet/http/HttpServlet.service(HttpServlet.java:856(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.executeServlet(JspServletWrapper.java:147(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:139(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at com/hs/common/filter/CharsetFilter.doFilter(CharsetFilter.java:84(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:122(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at jeus/servlet/engine/ServletWrapper.execute(ServletWrapper.java:195(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.execute(JspServletWrapper.java:193(Compiled Code)) at jeus/servlet/engine/WebtobRequestProcessor.run(WebtobRequestProcessor.java:183) Native Stack No Native stack trace available 2. Waiting lock 중 일부 Thread 정보 1) com/aintop/db/DBHandler.dbOpen 시점에 Waiting lock 발생 Thread Name webtob1-hth0(localhost:9900)-w001 [container1-23] State Blocked Monitor Waiting for Monitor Lock on com/aintop/db/PoolMan@070000001764EBB0/070000001764EBC8 Java Stack at com/aintop/db/DBHandler.dbOpen(DBHandler.java:329(Compiled Code)) at com/aintop/db/DBHandler.executeSelect(DBHandler.java:389(Compiled Code)) at jeus_jspwork/_eip/_portal/_body/_theme002/_gadget/_500_GdgtCop_5fjsp._jspService(_500_GdgtCop_5fjsp.java:412(Compiled Code)) at jeus/servlet/jsp/HttpJspBase.service(HttpJspBase.java:54(Compiled Code)) at javax/servlet/http/HttpServlet.service(HttpServlet.java:856(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.executeServlet(JspServletWrapper.java:147(Compiled Code)) at jeus/servlet/engine/RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:505(Compiled Code)) at jeus/servlet/engine/RequestDispatcherImpl.doInclude(RequestDispatcherImpl..java:646(Compiled Code)) at jeus/servlet/engine/RequestDispatcherImpl.include(RequestDispatcherImpl.java:598(Compiled Code)) at jeus/servlet/jsp2/runtime/JspRuntimeLibrary.include(JspRuntimeLibrary.java:967(Compiled Code)) at jeus/servlet/jsp2/runtime/PageContextImpl.doInclude(PageContextImpl.java:641(Compiled Code)) at jeus/servlet/jsp2/runtime/PageContextImpl.include(PageContextImpl.java:620(Compiled Code)) at jeus_jspwork/_eip/_portal/_body/_theme002/_500_MainBody_5fjsp._jspService(_500_MainBody_5fjsp.java:873(Compiled Code)) at jeus/servlet/jsp/HttpJspBase.service(HttpJspBase.java:54(Compiled Code)) at javax/servlet/http/HttpServlet.service(HttpServlet.java:856(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.executeServlet(JspServletWrapper.java:147(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:139(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at com/hs/common/filter/CharsetFilter.doFilter(CharsetFilter.java:84(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:122(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at jeus/servlet/engine/ServletWrapper.execute(ServletWrapper.java:195(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.execute(JspServletWrapper.java:193(Compiled Code)) at jeus/servlet/engine/WebtobRequestProcessor.run(WebtobRequestProcessor.java:183) Native Stack No Native stack trace available 2) com/aintop/db/DBHandler.dbClose 시점에 Waiting lock 발생 Thread Name webtob1-hth0(localhost:9900)-w019 [container1-41] State Blocked Monitor Waiting for Monitor Lock on com/aintop/db/PoolMan@070000001764EBB0/070000001764EBC8 Java Stack at com/aintop/db/DBHandler.dbClose(DBHandler.java:347(Compiled Code)) at com/aintop/db/DBHandler.executeSelect(DBHandler.java:409(Compiled Code)) at jeus_jspwork/_aintop/_f_5fcharts/_data/_500_MSBar2D_5fjsp._jspService(_500_MSBar2D_5fjsp.java:116(Compiled Code)) at jeus/servlet/jsp/HttpJspBase.service(HttpJspBase.java:54(Compiled Code)) at javax/servlet/http/HttpServlet.service(HttpServlet.java:856(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.executeServlet(JspServletWrapper.java:147(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:139(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at com/hs/common/filter/CharsetFilter.doFilter(CharsetFilter.java:84(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.internalDoFilter(FilterChainImpl.java:122(Compiled Code)) at jeus/servlet/filter2/FilterChainImpl.doFilter(FilterChainImpl.java:91(Compiled Code)) at jeus/servlet/engine/ServletWrapper.execute(ServletWrapper.java:195(Compiled Code)) at jeus/servlet/jsp/JspServletWrapper.execute(JspServletWrapper.java:193(Compiled Code)) at jeus/servlet/engine/WebtobRequestProcessor.run(WebtobRequestProcessor.java:183) Native Stack No Native stack trace available