2011-03-17 105 views
4

我在Tomcat上有一个长期的工作。这是一个数据转换来更新数据库的新版本,以防万一你想知道。在我们的开发服务器上,它运行了7个小时,但没有问题就完成了。每60秒它会向浏览器发送进度消息,让您知道它仍处于活动状态,并保持连接处于活动状态。tomcat在120分钟超时过程

然后我试着在不同的服务器上运行它,120分钟后它失败,出现异常“getAttribute:Session already failedated”。我重新启动它,并在120分钟后再次失败并显示相同的消息。它具有在某些关键点重新启动的功能,因此我在“第2部分”开始了它,并且在120分钟时再次死亡。

我得出的结论是,服务器的时间限制为120分钟 - 由于程序错误在连续3次完全相同的流逝时间内死亡,这太巧合了,尤其是当第三次运行会是不同的数据。

Tomcat <会话超时>在我们的开发服务器上设置为30,并在该服务器上运行7小时没有问题,所以无论限制如何,我都不认为是这样。

任何线索是什么让我失望?我猜在那里有另一种超时,但我不知道它是什么。

+1

有没有可能只是在Tomcat中的会话超时是120分钟,并且您还没有使用它那么久?根据错误消息,我可能会提出一些诊断步骤?添加'HttpSessionListener'并在'sessionDestroyed'上打印堆栈跟踪(使用断点捕获它会更好)。然后,您将能够确定Tomcat中的哪种机制使进程中间的会话无效(无效线程,您自己的代码...) – 2011-03-17 20:22:15

+0

我可以尝试一下,看看它是否会提供任何有用信息。我无法设置断点,因为当我从任何实际有开发环境的服务器运行时,它不会失败。当我在测试部门的服务器上运行时,它只会失败。我想这将是一个有趣的实验,看看他们是否会让我访问在该服务器上部署开发环境并运行。 – Jay 2011-03-19 18:52:19

回答

3

您是否可以将作业背景并更新资源,以便轮询状态而不是保持整个连接时间?

你可以很容易地用一个线程做到这一点。

+0

是的,我当然可以。实际上,因为这是一次性数据转换,所以它不需要很漂亮,我正在考虑将整个事情从Web应用程序中提取出来,并将其转化为命令行程序。但是我对这个问题是什么感到困惑。有时你只需接受解决方法,但我想知道发生了什么。 – Jay 2011-03-19 18:46:44

+0

诊断这类事情真的很难,因为问题可能出现在很多不同的层面。 Tomcat,服务器,防火墙,路由器,浏览器,工作站。它可能在任何时候都会超时。 – ScArcher2 2011-03-21 19:30:47

+0

那么,消息说SESSION不再存在的事实在我看来似乎表明问题在Tomcat中,而不是像防火墙问题。当然,错误信息可能会引起误解。 – Jay 2011-03-22 16:31:21

1

here:

org.apache.catalina.session.StandardSession.ACTIVITY_CHECK

如果这是真的,或者如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE是真实的Tomcat将跟踪每个活动的请求数会话。在确定会话是否有效时,任何至少有一个活动请求的会话将始终被视为有效。

如果未指定,将使用默认值false。