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 환경에서 각각 사용가능한 분석툴들을 정리하면 아래와 같다

 

 

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