1

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

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

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

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

4

3 回答 3

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来显示两者的区别。

于 2009-04-27T20:05:20.077 回答
0

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

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

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

  1. 您启用了 SSL/https
  2. 您的会话数量增加了,暴露了内存问题。
于 2009-04-27T18:39:35.103 回答
0

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

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

于 2009-05-04T14:49:25.817 回答