2019년 3월 26일 화요일

DBCP2, Tomcat 8 이후 JDBC 설정

tomcat8 부터 내부 DB Pool이 DBCP2 이다. 
인터넷에서 DBCP가 기본이라는곳도 있는데...
스텍을 보면 확인된다.   DBCP2다 

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)

server.xml에 JDBC 등록 예 이다. 

<Resource 
    name="jdbc/dbaccess" 
    auth="Container" 
    type="javax.sql.DataSource"
      username="some_user" 
    password="{the password}" 
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://dbserver:3306/dbaccess?useFastDateParsing=false&amp;jdbcCompliantTruncation=false"
    maxTotal="500" 
    maxIdle="50"
    minIdle="50"
    initialSize="50"
    <!-- dbcp2, tomcat 8 부터 바뀜 getConnection후 대기시간 -->
    maxWaitMillis="5000"
    validationQuery="SELECT 1" 
    <!-- 가져올 때 체크 --> 
    testOnBorrow="false"
    <!-- eviction 체크 시간마다 Idle 체크 -->
    testWhileIdle="true"
    <!-- 반납할때 체크 -->
    testOnReturn="false"
    minEvictableIdleTimeMillis="30000" <!--이시간동안 사용안하면 제거 대상이 된다. -->
    numTestsPerEvictionRun="10" <!-- eviction시에 Pool을 lock을 잡고 이 수량만큼 체크 한다. 너무 적으면 전체 체크에 오래 걸리고 너무 길면 Pool이 lock되는 시간이 길어서 성능영향이 있을 수 있다. -->
    timeBetweenEvictionRunsMillis="30000" <!-- evction 주기를 설정한다. 이 주기와 한번에 점검하는수 그리고 전체 수의 상관관계를 잘 계산해야 F/W이 있는경우 안짤린다. -->
    <!-- SQL 수행시간을 제한 한다. connector의 timeout값과 맞추었다.
dbcp2, tomcat8 부터 removeAbandoned 가 두개로 분리 되었다 OnMaintenance는 앞서 Eviction시 Abandoned를 제거할지 지정한다. 
--> 
    removeAbandonedOnBorrow="true" 
    removeAbandonedOnMaintenance="true" 
     <!-- 20초 이상 돌고 있으면 잘라 -->
    removeAbandonedTimeout="20" 
    <!--제거내용이 로그로 남는다 초기에는 켜서 보다가 문제 없으면 꺼도 된다. 까끔 끊어진다고 크레임 있을 수 있으므로 켜놓고 운영하는게 좋다 -->
    logAbandoned="true"
   <!--SQL을 컴파일 하여 성능을 올리는 방법을 사용할지 선택한다. 대부분 문제 없지만 SQL이 동적으로 생성되는 일부  사이트의 경우 사용율이 떨어지고 Native mem 누수를 유발하기도 한다 문제 있으면 꺼보도록 하자 개선 사항이지 껐다고 장애 나지 않는다. --> 
    poolPreparedStatements="true"
    defaultTransactionIsolation="READ_COMMITTED"
  />


DB Pool이 꽉차면 Thread가 다 대기하는 상태가 되어 문제가 된다. 
아래 같은 메시지가 발생할 수 있다. 

All threads (512) are currently busy, waiting. Increase maxThreads (512) or check the servlet status

댓글 없음:

댓글 쓰기

본 블로그의 댓글은 검토후 등록됩니다.