공유할 서비스 선택

TECH


TECH

Middleware (오픈소스 활용-28) was에서 T4CConnection (Locked) 발생시 해결방법

페이지 정보

작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 41회 좋아요 0회 작성일 24-04-22 16:02

본문

안녕하세요. 미들웨어 입니다. 

 

이번 가이드에서는 WAS에서 JDBC 연결하고 사용할때 종종 발생하지만 해결하기 어렵다 느꼈던 T4CConnection 에 대해 설명해보겠습니다. 

일반적으로 JDBC는 알지만, T4CConnection은 잘 모르고 생소하긴 합니다. 

 

예로는 Tomcat 에서 JDBC 연결하여 사용시 a oracle.jdbc.driver.T4CConnection 에러 발행됐을 경우 해결방법이 대해 정리 해보겠습니다.

T4CConnection error 은 일반적으로 오랜시간 화면을 멈춰서 가만히 있을때 T4CConnection 에러가 발생하고, DB접속이 원활하지 않을때도 발생합니다. 

 

로그는 WAS에서 Thread Dump로 확인 가능하고 server.log 에도 찍히긴 합니다. 

 



1. Tomcat Thread Dump 분석

문제가 되던 시점에 인스턴스에 20~30개 정도 ThreadHang 현상이 발생되고 있었으며, ThreadHang이 걸려있던 부분의 Dump 내용을 보면 아래와 같습니다.

아래 stackTrace를 보면 socket Read0 상태입니다

stackTrace DB와 연결이 종료되지 않은 상태로 hang이 걸려있는 부분이 확인됐습니다.

 

at java.net.SocketInputStream.socketRead0(Native Method)”

 

T4CConnection은 네트워크 장애가 생겼을 때 StatementTimeout 정상적으로 동작하지 않을 경우 Lock가 발생을 합니다.

Locked가 발생하지 않게 하려면 StatementTimeout으로 connection Pool반환 해야 합니다.

 

at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)

at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1477)

- locked <0x0000000780228350> (a oracle.jdbc.driver.T4CConnection)

 


2. Statement Timeout 두 가지 방법

 

2-1. Tomcat 에서 제공하는 옵션으로 설정 – (방법 1)

validationQueryTimeout 값을 적용할때 해당 옵션의 default 값은 -1로 무한정 대기를 합니다

해당 설정 값을 어플리케이션 로직에서 처리할 수 있는 가장 긴 시간을 설정해두면 oracle.jdbc.driver.T4CConnection 같은 장애는 해결될 것 같습니다.

 

(매뉴얼 참조 : http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html)

 

 

# validationQueryTimeout


(int) The timeout in seconds before a connection validation queries fail.

 

This works by calling java.sql.Statement.setQueryTimeout(seconds) on the statement that executes the validationQuery

The pool itself doesn't timeout the query, it is still up to the JDBC driver to enforce query timeouts.

A value less than or equal to zero will disable this feature. The default value is -1. 

 



     2-2. Oracle JDBC Statement
메소드를 호출해서 Statement생성 – (방법 2)

해당 방법은 한 인스턴스 안에 배치를 돌리거나 SQL수행시간이 길경우 별도로 해당 부분에 한해 메소드를 만들어서 

호출하는 방법에 대한 제시입니다.

샘플은 구글에 찾아보면 있을 것 같네요.

 

- Connection.createStatement() 메서드를 호출하여 Statement를 생성

- Statement.executeQuery() 메서드를 호출

- Statement는 자신의 Connection을 사용하여 Oracle DBMS로 쿼리를 전송

- Statement는 타임아웃 처리를 위해 OracleTimeoutPollingThread(classloader별로 1개 존재) Statement를 등록

- 타임아웃이 발생

- OracleTimeoutPollingThread OracleStatement.cancel() 메서드를 호출

- Connection을 통해 취소(cancel) 메시지를 전송하여 수행중인 쿼리를 취소

 

 

 

 

3. WAS DB의 통신 TimeOut 계층 

상위 레벨의 타임아웃은 하위 레벨의 타임아웃에 의존성을 가지고 있습니다. 

하위 레벨의 타임아웃이 정상으로 동작해야 상위 레벨의 타임아웃도 정상으로 동작합니다. 

 

예를 들어, JDBC Driver SocketTimeout이 정상으로 동작하지 않으면그보다 상위 레벨의 타임아웃인 StatementTimeout TransactionTimeout도 정상으로 동작하지 않습니다. 

 

StatementTimeout은 네트워크 연결 장애에 대한 타임아웃을 담당하는 것이 아니고, 

StatementTimeout Statement 한 개의 수행 시간을 제한하는 기능만 담당합니다. 

네트워크 장애에 대비하는 타임아웃은 JDBC Driver SoecketTimeout이 처리해야 합니다.  

 

(validationQueryTimeout)

f717d0ab3efd91d69148e2cb15cb09f8_1713769150_9777.png


4. oracle.jdbc.driver.T4CConnection.getSchema() 조치방법 관련해서 참고할 만한 링크 공유해드립니다. 

그럼 열공하세요~!!


댓글목록

등록된 댓글이 없습니다.

TECH - 좋아요글 총 건전체보기 >

  • 게시물이 없습니다.
TECH - 좋아요글 더보기
TECH 목록
번호 제목 작성자 작성일 조회수
열람중 Middleware 미들웨어 아이디로 검색 전체게시물 04-22 42
열람중
(오픈소스 활용-28) was에서 T4CConnection (Locked) 발생시 해결방법

카테고리 : Middleware

42 0
작성자 : 미들웨어 24/04/22
104 Middleware 미들웨어 아이디로 검색 전체게시물 04-08 73
(오픈소스 활용-28) Java Flight Recorder 이란? Java 모니터링을 구현가능

카테고리 : Middleware

73 0
작성자 : 미들웨어 24/04/08
103 Middleware 미들웨어 아이디로 검색 전체게시물 03-21 128
(오픈소스 활용-27) Redis Cache 란? 활용방법과 다운로드

카테고리 : Middleware

128 0
작성자 : 미들웨어 24/03/21
102 Middleware 미들웨어 아이디로 검색 전체게시물 03-07 174
(weblogic 활용) WebLogic Kubernetes Toolkit-UI (무료) 설치 및 구성가이드

카테고리 : Middleware

174 0
작성자 : 미들웨어 24/03/07
101 Middleware 미들웨어 아이디로 검색 전체게시물 02-20 423
(AI-2) Chat-GPT 4All - 허깅페이스 & LLM 국내 인기순위 (Open Ko-LLM LeaderBoard)

카테고리 : Middleware

423 0
작성자 : 미들웨어 24/02/20
100 Middleware 미들웨어 아이디로 검색 전체게시물 02-06 454
(AI-1) Chat-GPT 4All - PC 설치 방법

카테고리 : Middleware

454 0
작성자 : 미들웨어 24/02/06
99 Middleware 미들웨어 아이디로 검색 전체게시물 01-19 216
(오픈소스 활용-26) scouter 2.22 에서 Weblogic14 모니터링 등록 중 이슈 조치방법

카테고리 : Middleware

216 0
작성자 : 미들웨어 24/01/19
98 Middleware 미들웨어 아이디로 검색 전체게시물 01-06 330
(오픈소스 활용-25) scouter 2.22 에서 JEUS8 모니터링 등록 하는 방법

카테고리 : Middleware

330 0
작성자 : 미들웨어 24/01/06
97 Middleware 미들웨어 아이디로 검색 전체게시물 12-22 293
(오픈소스 활용-24) 리눅스 java, python 우선순위 설정방법 - (update-alternatives 명령어)

카테고리 : Middleware

293 0
작성자 : 미들웨어 23/12/22
96 Middleware 미들웨어 아이디로 검색 전체게시물 12-07 565
(Apache) Apache 2.4.37 & Weblogic-14 연동방법 (mod_wl_24.so 활용)

카테고리 : Middleware

565 0
작성자 : 미들웨어 23/12/07
Total 105건
게시물 검색

주식회사 클럭스| 대표 : 이찬호| 사업자등록번호 : 107-87-27655
주소 : 서울특별시 영등포구 국회대로 800, 여의도파라곤
E-mail : sales@chlux.co.kr
Copyright © 클럭스 www.chlux.co.kr All rights reserved.
상단으로Top