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 사이에 뭔가 문제가 발생해서, 지연이 발생된게 아닌가 추측합니다.


참조


Oct 29, 2018 - clean package -P

maven package clean 하게 처리하면서 pom.xml 에 기술한 resource 를 사용하는 법입니다.

clean package -P

-P는 정의된 profies중 하나를 처리함을 의미합니다.

<!-- profile definition -->
   <profiles>
       <profile>
           <id>local</id>
           <activation>
               <activeByDefault>true</activeByDefault>
           </activation>
           <properties>
               <environment></environment>
           </properties>
       </profile>
       <profile>
           <id>dev</id>
           <properties>
               <profile-id>dev</profile-id>
               <environment>-dev</environment>
               <maven.test.skip>true</maven.test.skip>
           </properties>
       </profile>
       <profile>
           <id>server</id>
           <properties>
               <profile-id>server</profile-id>
               <environment>-server</environment>
               <maven.test.skip>true</maven.test.skip>
           </properties>
       </profile>
   </profiles>

위와같이 server, dev, local 등을 설정할 수 있으며 그냥 처리할 경우, activeByDefault에 의해 local 이 default 처리됩니다. resources-batch 와 같이 resource뒤에 접미사를 ‘-dev’ , ‘-batch’등으로 두어 프로파일을 선택할 수 있도록 합니다.

인텔리J에서는 자동으로 우측에 maven 의 build 타입을 찾을 수 있어, 쉽게 변경가능합니다.