Nov 5, 2018 - Cannot create JDBC driver of class

새로운 db connection 을 연결했는데, Tomcat에서 datasource/context정보를 못찾을 때. 다음과 같은 오류 내용이 발생했습니다.

Cannot create JDBC driver of class '' for connect URL 'null'

일때. datasource.properties 를 설정하여 처리하도록 작업이 되어있으며, tomcat의 server.xml 을 설정해두었는데, server.xml 파일 태그에 하부 엘리먼트로

<Context>
    <ResourceLink name="xxx" global="xxx" type="javax.sql.DataSource"/>
</Context>

위와같이 설정했어야했는데, context.xml 쪽 이슈는 빼면서 발생했습니다. ResourceLink 를 통해, server.xml 에서 정의하였습니다.

<Resource name="xxx" auth="Container"
     factory="com.zaxxer.hikari.HikariJNDIFactory"
     type="javax.sql.DataSource"
     minimumIdle="30"
     maximumPoolSize="30"
     maxLifetime="3600000"
     connectionTimeout="5000"
     dataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
     dataSource.cachePrepStmts="true"
     dataSource.prepStmtCacheSize="250"
     dataSource.prepStmtCacheSqlLimit="2048"
     registerMbeans="true"
     dataSource.logger="com.mysql.jdbc.log.StandardLogger"
     dataSource.logSlowQueries="false"
     dataSource.dumpQueriesOnException="false"
     dataSource.user="xxxxx"
     dataSource.password="xxxxx"
     dataSource.url="jdbc:mysql://xxxxx:3306/xxx?autoReconnect=true"
     validationQuery="SELECT 1"
     validationInterval="240000"
     testWhileIdle="true" />

resource에 정의해두었기 때문에 server.xml 에만 정의하면 이슈가 발생합니다.


참조


Oct 29, 2018 - protocol 설정하기

org.apache.coyote.http11.Http11NioProtocol 로 변경

BIO connector 에 비해서 NIO connector 를 사용하는 것 자체로 20~30% 정도의 성능 향상이 이루어진다고 합니다. 현재 server.xml 을 보았을 때,

<Connector protocol="HTTP/1.1" port="80" enableLookups="false" tcpNoDelay="true"  compression="off"
           maxThreads="5000" minSpareThreads="50" acceptCount="10" connectionTimeout="8000"
           maxKeepAliveRequests="-1" maxHttpHeaderSize="40960"
/>

   <Connector port="443" keystoreFile="파일경로"                
               keystorePass="비밀번호" protocol="org.apache.coyote.http11.Http11Protocol"
              maxThreads="4000" SSLEnabled="true" scheme="https" secure="true"
              clientAuth="false" connectionTimeout="8000" maxHttpHeaderSize="40960" />

protocol=”HTTP/1.1”와 protocol=”org.apache.coyote.http11.Http11Protocol”를 사용하고 있습니다. 80포트로 사용하는 protocol=”HTTP/1.1” 를 org.apache.coyote.http11.Http11NioProtocol 로 변경하였으며, 기존에 쓰던 org.apache.coyote.http11.Http11Protocol 또한 org.apache.coyote.http11.Http11NioProtocol으로 변경하여 전체 서버 적용하여 안정화가 되었다는 이야기를 들어, 제 서버에도 적용해봤습니다.


<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="80" enableLookups="false" tcpNoDelay="true"  compression="off"
           maxThreads="5000" minSpareThreads="50" acceptCount="10" connectionTimeout="8000"
           maxKeepAliveRequests="-1" maxHttpHeaderSize="40960"
/>

   <Connector port="443" keystoreFile="파일경로"                
               keystorePass="비밀번호" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="4000" SSLEnabled="true" scheme="https" secure="true"
              clientAuth="false" connectionTimeout="8000" maxHttpHeaderSize="40960" />

전체 변경을 완료했습니다. 변경 전과 변경 후의 Thread 갯수와 속도 개선등의 명확한 수치 변화는 확인되지 않았습니다. 오히려 Thread 가 100개 정도 더 증가된 것으로 확인이되네요.

참고로 톰캣에서 protocol을 설정하지 않으면 아래의 2가지 connector를 자동으로 스위칭 한다고 하는데,

blocking Java connector - org.apache.coyote.http11.Http11Protocol
the APR/native connector - org.apache.coyote.http11.Http11AprProtocol

위의 2가지로 스위칭한다고 합니다.


참조


Oct 29, 2018 - 이클립스 CPU 100%

linking viewer selection with current editor

위와같은 메시지가 우측하단에 노출되면서 cpu 100% 를 차지하는데, 실제 메모리라든가 다른 문제는 없었습니다. 소스 수정 및 반영을 하는데도 상당히 시간이 오래 걸렸는데, 인터넷 서핑을 해보니, eclipse 의 PermSize 를 늘려주지 문제가 해결되었다고 합니다.

-XX:PermSize=512m
-XX:MaxPermSize=512m
-Xms2048m
-Xmx2048m

PermSize 하고, MaxPermSize 기능 추가했습니다.

성능향상을 위해,

Help->About Eclipse->Installation Details->Installed Software

mylyn 플러그인 제거(php 용)하였습니다. 어느정도 성능이 안정화되었지만, 결국 이클립스보다 인텔리J로 코딩할때 안정감이 있어, 툴 변경을 고민중입니다.

==== 2018.11.20 추가내용 ==== 아무리 해도 해결이 안되어서 인텔리J로 작업중이었는데, 창을 전부 닫고, 재시작하니 문제가 해결되었습니다. PermSize라기보다, 프로젝트를 자주 close 하고 다시 open 하면서 남겨있던 java 파일과 linking viewer 사이에 뭔가 문제가 발생해서, 지연이 발생된게 아닌가 추측합니다.


참조