【问题标题】:What's your experience with adding SSL to Tomcat 6?您对 Tomcat 6 添加 SSL 有何经验?
【发布时间】:2009-04-27 18:36:10
【问题描述】:

在周末,我们为一个运行了一段时间而没有出现错误的 Tomcat 6 实例添加了 SSL 安全性。今天早上,机器上的会话数增加后,Tomcat 开始向用户抛出 500 错误。我检查了日志,发现了一个 OutOfMemory 实例,随后出现了几十个与 Google Guice 尝试启动新线程相关的错误。我只能想象随着 SSL 的添加,正在创建的更多线程或某些此类情况正在使用更多内存。我不太确定这些额外资源的使用地点或方式。

我希望那些有在 Tomcat 上使用 SSL 的经验的人可以为我指出一些寻找线索的方向。目前我不确定问题可能出在哪里。以下是一些关于我们的设置和配置的统计数据:

-XX:ThreadStackSize=512
初始内存池:128MB
最大内存池:1024MB
线程堆栈大小:512KB

我一直在以各种方式调整这些,试图至少找到一条通往成功的道路。到目前为止,在服务器重新启动后大约 5 分钟,性能开始下降。任何方向将不胜感激。

【问题讨论】:

    标签: java tomcat ssl out-of-memory


    【解决方案1】:

    这是一种可能性,尽管它有点遥不可及:浏览器缓存 https 内容的积极性远低于 http 内容。因此,如果您的最终用户现在通过 HTTPS 访问服务,但之前通过 HTTP 访问,您将处理更多请求(尽管会话数相同)。

    如果做不到这一点,我会接受上面 Matt B 的建议; profile 找出堆的使用位置。将 -verbose:gc -Xloggc:/path/to/where/you/want/gc.log 添加到您的启动 JVM 参数中,并使用生成的 gc.log 来查看是否可以将堆大小的跳跃与特定的请求序列相关联。 使用jmap -dump:format=b,file=/path/to/dump {tomcat PID} 生成堆转储。如果启动tomcat后立即取一个,启动死机的时候取一个,那么可以用jhat来显示两者的区别。

    【讨论】:

    • 其实我觉得也不是那么遥不可及。但无论如何,操作过程只是将其视为任何您无法猜测原因的旧 OutOfMemoyError 并添加诊断和分析。
    【解决方案2】:

    向Tomcat6添加SSL证书/https应该不会导致这些问题。

    OutOfMemoryError 来自哪里?你能附上一个分析器来看看是什么占用了这么多内存吗?

    我认为你在这里看到的是两个不相关的变化:

    1. 您启用了 SSL/https
    2. 您的会话数量增加了,暴露了内存问题。

    【讨论】:

    • 我也不这么认为。然而,星期五每个人都很开心。我们有相同数量的会话、相同的代码等。系统上发生的唯一变化是添加了 SSL。
    • 我还应该声明删除 SSL 可以解决问题。禁用 SSL 后一切正常。
    【解决方案3】:

    关于 SSLSessionImpl 对象中 gc 的讨论可能是相关的。 . . .

    https://forums.oracle.com/forums/thread.jspa?threadID=1532009

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多