如何优化 Tomcat 6 SSL 性能

如何优化 Tomcat 6 SSL 性能

我们在slicehost.com上的Ubuntu 2GB切片上运行Tomcat 6

JSP 应用程序 fwiw 是 Open Clinica 3.1,我基本按照书上说的实现了 SSL,如您所见:

   <Connector port="8443"  
           scheme="https"   SSLEnabled="true"
           keystorePass="XXXXX" keystoreFile="XXXXX" 
    maxKeepAliveRequests="0"
    sessionCacheSize="0" sessionTimeout="0"  compression="on"   maxThreads="500"
    clientAuth="false"  sslProtocol="TLS" />

问题在于 Open Clinica Java 应用程序执行大量 HTTP 请求来构建页面 - 使用 Chrome 开发人员工具,我可以看到典型页面有 70-80 个请求。

当您为每个请求添加 SSL 握手时,额外的网络延迟会缩短应用程序的响应时间。FWIW - 客户端用户位于以色列、欧洲和美国 - 因此在用户旁边运行本地服务器的选项实际上不可行。我知道由于 Slicehose 位于美国 - 到以色列的网络延迟很差,但我觉得由于服务器的 HTTP 性能是可以接受的 - 我们应该能够做得更好。

为了尽量减少 SSL 握手,我定义了无限的 sessionCacheSize 和 SessionTimeout,如上面的连接器定义所示

然而,当我在客户端运行 ssldump 时,我仍然看到大量的握手,这似乎表明 Tomcat 实际上忽略了这些参数

服务器没有压力 - 同时有 5 个用户,大约有 100MB 可用内存,并且几乎没有交换。

答案1

每个资源上的 SSL 握手是 HTTP 的活着功能不起作用。

使用 keep-alive 时,TCP 连接只需进行一次 SSL 握手,然后可以通过该连接请求多个资源。现代浏览器喜欢打开多个 TCP 连接,以避免加载缓慢的资源出现瓶颈,因此您仍然会看到多次握手,但肯定比关闭 keep-alive 时少。

maxKeepAliveRequests="0"正在关闭保持活动,我相信(我实际上找不到关于 0 做什么的文档;1 禁用保持活动并且 -1 不设置限制 - 我假设 0 也是一种有效的禁用)。

如果您打算禁用保持活动,我建议您重新考虑;如果您打算将其设置为无限制,请将该选项更改为 -1。

答案2

我建议在前端使用带有 AJP 连接器的 Apache 反向代理。将 SSL 放入 Apache,然后通过私有链接(例如 localhost)以明文形式连接到 Tomcat。

发挥 Apache 所擅长的领域(具有多种奇特选项的 Web 服务器),并发挥 Tomcat 所擅长的领域(Java 应用程序)。

答案3

保持活动显然是您获得的最大收益,但如果您仍然需要减少延迟,则应检查您是否正在使用 APR 原生连接器。

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#连接器比较

相关内容