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

2019년 3월 12일 화요일

OpenJDK 선택하기



정말 오랜만에 약간은 공식적인(?) 블로그를 작성해 봤습니다.

흠......  원본을 검토하고 조정하고 wiki의 글을 워드프레스로 넘기다 보니 처음 의도했던것과 조금 다른곳도 있고 이상한 태그가 들어간곳도 있지만...

wiki 원본작성까지만 내 역할이고 나머지 부분은 다 도움받은것이라 딴지걸기도 미안하고...

여하간 대세에 지장없으니 그냥 읽으면 되겠다.




LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지


2018년 오라클의 라이선스 체계가 변경되면서 2019년 1월 이후 더 이상 무료로 Oracle JDK를 사용할 수 없게 되었습니다. 이에 LINE 내부에서는 사전에 OpenJDK를 적용하기 위해 필요한 사항이나 검토 항목을 정리하기 위하여 TF(task force)를 구성하였고, 진행된 내용과 사용된 기술적인 사항들을 정리하고자 이 글을 작성하게 되었습니다.
https://engineering.linecorp.com/ko/blog/line-open-jdk/