上周末,我们向Tomcat6实例添加了SSL安全性,该实例已经运行了一段时间,没有出现错误。今天早上,在机器上的会话数量增加后,Tomcat开始向用户抛出500个错误。我检查了日志,发现了OutOfMemory的一个实例,随后出现了几十个与Google Guice尝试启动新线程相关的错误。我只能想象随着SSL的加入,更多的内存被创建的更多线程所使用,或者类似的情况。我不太确定额外的资源是在哪里使用的,或者是如何使用的。
我希望那些有在Tomcat上使用SSL的经验的人可以在一些地方给我指点方向,以寻找线索。目前,我不确定问题出在哪里。以下是有关我们的设置和配置的一些统计信息:
-XX:ThreadStackSize=512
初始内存池: 128MB
最大内存池: 1024MB
线程栈大小: 512KB
我一直在以各种方式调整它们,试图至少找到一条通往成功的道路。到目前为止,服务器重新启动大约5分钟后,性能开始急剧下降。任何方向都将不胜感激。
发布于 2009-04-27 20:05:20
这里有一种可能性,尽管可能性有点小:浏览器缓存https内容的力度要比http内容小得多。因此,如果您的最终用户现在通过HTTPS访问服务,但以前是通过HTTP访问服务,那么您将处理更多的请求(尽管具有相同数量的会话)。
如果做不到这一点,我会采用上面Matt B的建议;配置文件来找出堆在哪里被使用。将-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-27 18:39:35
向Tomcat6添加SSL证书/ https应该不会导致这些问题。
OutOfMemoryError是从哪里来的?您可以附加一个分析器来查看是什么占用了这么多内存吗?
我认为您在这里看到的是两个不相关的更改:
发布于 2009-05-04 14:49:26
关于SSLSessionImpl对象中的gc的讨论可能是相关的。。。。
https://forums.oracle.com/forums/thread.jspa?threadID=1532009
https://stackoverflow.com/questions/794727
复制相似问题