0

配置:我们有 iPlanet Web 服务器,它位于 Linux 机器中部署的 WebSphere Portal 6.1 集群 (2) 之前。

当用户尝试跨文件系统(NFS 挂载)复制 10 GB 文件时,我们使用 java 运行时将文件复制到不同的 NFS 挂载,希望它比使用任何其他 java 库更快。

proc = rt.exec("cp " + fileName + " " + outFileName);

部署的应用程序是一个 JSF portlet 应用程序。
a) 应用服务器和应用程序上的会话超时为 60 分钟
b) 我们从客户端页面进行 Ajax 调用以保持会话处于活动状态

用户在 3 分钟内收到 HTTP 500,而我们的日志显示该文件仍在复制。不确定 WebSphere 为什么发送 HTTP 500?

10分钟后,文件被复制,当他点击刷新时,他可以继续。

不确定是什么导致了这个 HTTP 500。

4

2 回答 2

1

WebContainer 线程不应该用于长任务。他在 3 分钟后得到 500,因为那是 WebSphere 决定线程挂起的时间。

您应该做的是使用 aWorkManager来执行那个长任务,并且客户端可以轮询以检查任务的状态。

如果您考虑在不久的将来升级到 WAS v8/v8.5,一个好主意就是使用Asynchronous Servlets

于 2012-12-17T16:45:44.433 回答
1

您的客户端在几分钟后收到 HTTP 500 错误的原因可能有几个原因。如果没有堆栈跟踪和一些相关的日志记录,就不可能知道 WebSphere 中的哪个组件在 3 分钟后“唤醒”并停止了一切。它可能是WebSphere 对Web Container 线程池的超时设置,也可能是其他一些超时——应该很容易从日志中得出结论。

要解决此问题,您可以执行以下操作之一:

  • 调整相关的超时值(再次取决于确切的超时值)
  • 更改您的设计,以便在后台执行长时间运行的任务。您可以为此使用 WebSphere 的Work Manager API,或异步 bean/servlet。
于 2012-12-17T17:16:26.800 回答