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가지로 스위칭한다고 합니다.


참조