2009년 10월 26일 월요일

[Timeout]UserTransaction과 SQL Timeout관계

javax.transaction.UserTransaction(ut)을 사용하는 Global Transaction의 기본적인 구조는 아래와 같다.

-----------------------

시간     소스

0초      ut.begin();

1초         select();        -> SQL Timeout

2초         insert()          -> SQL Timeout

3초         update();       -> SQL Timeout

4초         delete();        -> SQL Timeout

5초      ut.commit();    -> Transaction Timeout

-----------------------

* Transaction Timeout : begin() ↔ commit() 사이의 최대시간

* SQL Timeout : 각각 SQL 단위 수행 최대시간

 

이와 같이 UserTransaction을 사용하는 Global Transaction에서 고려해야 할 기본적인 Timeout은

Transaction TimeoutSQL Timeout 이다.

 

즉, 위의 예제를 보면,

총 Transaction 수행 시간은 5초이므로, Transaction Timeout 은 5초 보다 커야 하고,

SQL 수행시간은 1초이므로, SQL Timeout은 1초보다 커야한다.

 

<Timeout 설정값 비교>

 구분

UserTransaction

JEUS 5.0 

 Transaction Timeout

setTransactionTimeout

<active-timeout>

 SQL Timeout

 -

<stmt-query-timeout>

 

 

 

 

        

 

 

 

[Timeout]javax.transaction.UserTransaction

setTransactionTimeout

void setTransactionTimeout(int seconds)
                           throws SystemException
Modify the timeout value that is associated with transactions started by the current thread with the begin method.

If an application has not called this method, the transaction service uses some default value for the transaction timeout.

Parameters:
seconds - The value of the timeout in seconds. If the value is zero, the transaction service restores the default value. If the value is negative a SystemException is thrown.
Throws:
SystemException - Thrown if the transaction manager encounters an unexpected error condition

2009년 10월 25일 일요일

[Timeout]JEUS 5.0 Timeout 설정값

JEUS 트랜잭션 매니저는 예외 상황 처리를 위해서 다양한 타임 아웃 메커니즘을 사용한다. 타임 아웃 메커니즘의 값을 조정해서 어플리케이션 시스템에 가장 적합하도록 트랜잭션 매니저를 튜닝 할 수 있다.

  • Resolution: 타임 아웃 메커니즘의 기본 시간 간격. 이 값을 작게 설정하면 타임 아웃이 세밀하게 작동한다. 값이 너무 크면 타임 아웃이 너무 느슨하게 작동한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.tmResolution=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <resolution> 태그에 값을 설정한다.
  • Active Timeout: Global Transaction이 시작되면 이 시간 안에 commit이 실행되어야 한다. 그렇지 않으면 트랜잭션 매니저가 rollback 시켜버린다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.activeto=<time in milliseconds>추가한다. Web Container나 EJB Container에 설정하려면 <active-timeout> 태그에 값을 설정한다.
  • Prepare Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘prepare’ 신호를 받아야한다. 만약 받지를 못하면Root Coordinator는 Global Transaction을 rollback 시킨다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.prepareto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepare-timeout> 태그에 값을 설정한다.
  • Prepared Timeout: Sub Coordinator는 자신의Root Coordinator로부터 이 시간 안에commit을 해야 할지, rollback을 해야 할지를 나타내는 global decision을 받아야 한다. 만약 이 시간 내에 받질 못하면, Root Coordinator 로 다시 ‘prepare’에 대한 응답 메시지를 보낸다. 그래도 여전히시간 내에 global decision이 오지 않는다면, <heuristic-rollback>의 값이 true일 때 Global Transaction을 rollback 시켜버린다. <heuristic-rollback>이 false이면, Root Coordinator로 메시지를 보내고global decision을 기다리기를 계속 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.preparedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepared-timeout> 태그에 값을 설정한다.
  • Commit Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘commit’이나 ‘rollback’ 에 대한 결과를받아야 한다. 만약 결과가오지 않으면, Root Coordinator는 Global Transaction을 ‘Uncompleted List’에 기록해서, 트랜잭션이 완전히끝나지 않았음을 남겨둔다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.committo =<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <commit-timeout> 태그에 값을 설정한다.
  • Recovery Timeout: 이 값은 트랜잭션 복구 시에 사용된다. 트랜잭션 매니저는 트랜잭션 복구를 위해서 복구될 트랜잭션 정보를 가져오려고 한다. 만약 다른 트랜잭션 매니저에서 이 시간 내에 복구 정보를 알려주지 않으면, <heuristic-rollback>이 true 일 때, 해당 트랜잭션을 rollback 시킨다. 값이 false이면 트랜잭션 복구를 시스템 관리자에게 남겨두고 더 이상 진행하지 않는다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.recoveryto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <recovery-timeout> 태그에 값을 설정한다.
  • Uncompleted Timeout: 트랜잭션 매니저는 전체 트랜잭션 처리를 완료하기 위해, 실패한 Global Transaction의 목록을 보관한다. 완료되지 못한 Global Transaction의 정보는 복구 처리시에 사용되므로, 이 타임 아웃 시간까지 보관된다. 그러므로 이 시간이 너무 짧으면 복구 정보가 빨리 지워지게 되고, 트랜잭션 매니저가 해당 Global Transaction의 무결성을 복구할 수 없게 된다. 그 결과 Global Transaction 복구를 위해서, 시스템 관리자가 많은 작업을 직접 처리해야만 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.uncompletedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <uncompleted-timeout> 태그에값을 설정한다.

      <출처> technet.tmax.co.kr - 매뉴얼

2009년 10월 4일 일요일

[IBM,SUN,HP]GC, Heapdump, Thread dump 분석툴 비교

Garbage Collection, Heapdump, Thread dump(javacore) 분석 시

IBM, SUN, HP 환경에서 각각 사용가능한 분석툴들을 정리하면 아래와 같다

 

 

※ 이보다 더 많은 툴이 있을 수 있으나 개인적으로 사용해 본 툴 위주로 정리하였다.

 

 

 

 

 

 

 

2009년 9월 29일 화요일

[JVM Options] IBM

IBM JVM의 버전별 Options을 정리하면 아래와 같다.

 

참고로 아래는 Garbage Collector command-line options 링크이며,

기본 페이지는 "Java Diagnostics Gude" 이다.

 

[JVM 버전]

1.4.2  /  5.0  /  6.0  

2009년 9월 26일 토요일

[JVM Options] SUN

All the JVM options for various versions of the JVM

 on primarily SPARC/Solaris Platform(1.3.1~1.6(6.0))

 

참고로, 아래는 1.4.2 / 5.0 / 6.0에 대한

Standard, Non-Standard and  Hidden Options 에 대한 설명이다

 

 

[Standard / Non-Standard Options]

1.4.2  /  5.0  6.0

 

[Hidden Options]

http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

 

 

2009년 9월 21일 월요일

[JDK] IBM JDK 다운로드

현재 서버 개발환경은 IBM JDK를 사용하고 있다.

따라서, Eclipse로 개발하기 위해 IBM JDK download를 찾던중,

javaservice.net에 제니퍼소프트의 이원영 사장님의 친절한 글을 발견하게 되었다.

http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1171283145&p=6&s=t

 

정리하면 아래와 같다.

 

1. IBM JDK는 SUN JDK와 달리 별도의 윈도우용 JDK 설치파일(.exe)를 제공하지는 않는다.

2. 아래 주소에 있는 Eclipse zip파일을 다운받으면 파일 안에 버전별 JDK가 포함되어 있다.

http://www.ibm.com/developerworks/java/jdk/eclipse/index.html

→ "IBM Development Package for Eclipse" 클릭 → 로그인 → 아래 중 하나 선택

  1) JDK 1.4 포함  : 없음

  2) JDK 5.0 포함  : IBM Development Package for Eclipse, 32-bit Windows Version 211 선택
      → IBM_DevelopmentPackage_for_Eclipse_Win32_2.1.1.zip 에 포함

  6) JDK 6.0 포함 : IBM Development Package for Eclipse, 32-bit Windows Version 300 선택
      → IBM_DevelopmentPackage_for_Eclipse_Win32_3.0.0.zip 에 포함