配置: 我们有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的原因。
答案 0 :(得分:1)
WebContainer线程不应该用于长任务。 他在3分钟后获得500分,因为这是WebSphere决定线程挂起的时间。
您应该做的是使用WorkManager
执行该长任务,客户端可以轮询以检查任务的状态。
如果您考虑在不久的将来升级到WAS v8 / v8.5,那么最好使用Asynchronous Servlets
答案 1 :(得分:1)
由于某些原因,您的客户端在几分钟后收到HTTP 500错误的原因可能会发生。如果没有堆栈跟踪和一些相关的日志记录,就不可能知道WebSphere中的哪个组件在3分钟后“醒来”并停止了所有操作。它可能是Web容器线程池的WebSphere超时设置,也可能是其他一些超时 - 应该可以从日志中轻松得出结论。
要解决此问题,您可以执行以下操作之一: