javax.servlet.ServletException:会话对象内部结构:id:溢出会话

javax.servlet.ServletException: Session Object Internals: id : overflowed-session

我在 IBM Websphere Portal 服务器上部署了一个 Portlet,当我有很多用户时,当您点击 Url 时,Portal 服务器显示 "this portlet is unavailable"。

在日志中显示以下异常...

ServletWrappe E SRVE0068E: 无法调用 servlet MyCystomPortlet 上的 service() 方法。抛出异常:javax.servlet.ServletException: 会话对象内部: id : 溢出会话

在对 google 进行了一些研究之后,我相信我们正在发生的事情是并发会话太多。首先,有人可以确认这种理解是正确的吗?

其次,我相信您可以在 Websphere 中进行一些设置来解决这个问题。最大内存会话计数。目前它设置为 1000。我只想将它增加到 1500,但我不确定如果这个值太高怎么办,因此会有服务器崩溃的风险。有人可以给我一些建议吗?

最后,减少我的 portlet 中的会话超时是否是另一种尝试和解决此问题的有效方法?

谢谢

如果用户在未注销的情况下放弃会话,则缩短更短的超时时间会有所帮助,但通常最好将其从默认的 30 分钟缩短。

您可以增加内存中保留的最大会话数,但您还应该增加最大堆大小。但是请确保您的操作系统有足够的内存资源来处理增加的堆,否则如果系统开始交换,您的性能将非常差。

因此,请尝试仅针对失败的应用程序更改它(您可以覆盖每个应用程序的会话设置),不要更改 Web 容器中的全局设置,因为它们默认适用于所有应用程序。