Tomcat 8.5 配置 APR 连接器和 HTTPS

Tomcat 8.5 configuration with APR connecter and HTTPS

出于安全原因,我们应该将我们的应用程序服务器从 Tomcat7 升级到 Tomcat8.5(Tomcat 用作 Apache HTTPD 2.4 前面的应用程序服务器,它是 Web 服务器,它们使用 AJP with mod_jk 集成),在成功配置后,应用程序能够 运行 成功,但我注意到 CPU 的使用率高达 100%。

请注意,我使用 Tomcat8.5.47 本机 二进制文件 windows 从 here 下载。

这是我在 server.xml

中启用 https 的配置
<Connector port="8444" maxHttpHeaderSize="8192"
             maxThreads="150"
             enableLookups="false" disableUploadTimeout="true"
             acceptCount="100" scheme="https" secure="true"
             SSLEnabled="true"
             SSLCertificateFile="conf/certs/mycacert.pem"
             SSLCertificateKeyFile="conf/certs/cakey_enc.pem" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8444" />

这里有一些关于AJP connector的详细信息,请特别参考protocol属性。

经过Tomcat7和Tomcat8.5的长期比较,当我为Tomcat7和8.5输入https://localhost:port/manager/status时,我发现Tomcat7 使用 http-apr-8080(对于 http),http-apr-8443(对于 https,提到的是 http-apr 而不是 https-apr)和 ajp-apr-8009,但是 Tomact8.5 使用 http-nio-8080https-openssl-nio-8444ajp-nio-8009

因此 Tomcat7 在所有连接器中使用 APR 但 Tomcat8.5 使用 NIO。

附加信息:

我们正在 运行ning Windows Server 2008 R2 64 位,4GB RAM(这是测试服务器)。

4 月 1.7

AJP 1.3

JVM 1.8.0_231-b11

Tomcat初始内存池:1024MB

Tomcat最大内存池:1024MB

OpenSSL 1.1.1c

感谢您的帮助!

8.5.x 中存在 APR/native 库时默认值已更改。

在 Tomcat 7 中,它是 APR 连接器,包括用于 TLS 的 OpenSSL。

在 Tomcat 8.5 中,它是 NIO 连接器,包括用于 TLS 的 OpenSSL。

使用 OpenSSL 需要 APR/native 连接器。

如果你真的想要 APR/native(我个人会坚持使用默认值),最简单的方法是在你的 HTTP Connector 元素中使用以下内容 protocol="org.apache.coyote.http11.Http11AprProtocol"protocol="org.apache.coyote.ajp.AjpAprProtocol" 用于您的 AJP 连接器。

这个线程 给了我尝试 Tomcat8.5.5 的想法,它解决了使用 Apr Connector

时自发高 CPU 用法的问题