我们在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#连接器比较