如何使 WebSphere Application Server 上长时间运行的 Web 请求超时? [复制]
Posted
技术标签:
【中文标题】如何使 WebSphere Application Server 上长时间运行的 Web 请求超时? [复制]【英文标题】:How to time out long-running web requests on WebSphere Application Server? [duplicate] 【发布时间】:2015-08-20 12:35:56 【问题描述】:我正在尝试在 IBM WebSphere Application Server v. 8.5.5.4 上使 JavaEE 应用程序生产就绪。
如果网络请求导致计算时间过长(出于任何原因,从意外的大量数据到导致无限循环的编程错误),我想在一段时间后中止它们。
我在 Web Sphere 文档中找不到任何东西(我必须说,像往常一样)。到目前为止,我在 *** 和其他地方找到的所有内容都不适合我的情况:
客户端超时:不是我想要的,因为我想通过终止(几乎)无限循环的线程来节省服务器资源。 Container Managed Transactions:我没有使用它们,所以在这里设置超时会导致无处可去。 连接超时(JDBC 数据源):我不担心数据库请求花费太长时间,而是担心我的业务逻辑会永远循环。 WAS Stuck Thread Detection:据我了解,这只能用于打印警告。我会选择任何服务器端解决方案;它可能是一些 WAS 设置或一些我不知道的普通 JavaEE/Servlet 配置。
这里有 WebSphere 专家吗?感谢您的帮助!
编辑:
实际上是How do you kill a thread in Java? 和How to timeout a thread 的副本。问这个问题我假设这在 Java 中是可能的,因此在 WebSphere 中必须有一些特性。
【问题讨论】:
【参考方案1】:没有办法(安全地)强制停止或“超时”任何 JVM 中正在运行的线程,无论 JVM 是否是像 WebSphere 这样的应用程序服务器。对于卡在纯“计算”中的线程尤其如此(如果线程最终遇到中断点,那么 Thread.interrupt 可能是可用的;例如,挂起的线程通知侦听器可能能够做到,但没有WebSphere 中对此的内置支持)。您最好的选择是编写“合作”中断/取消;也就是说,您需要显式编写代码,定期检查它是否运行时间过长并自行取消。至于无意的无限循环,您唯一的防御措施是健壮/经过良好测试的代码。
【讨论】:
太棒了!感谢您的回答,我发现我正在寻找一个不存在的 WebSphere 功能。所以毕竟,这并不总是 WebSphere 的错;)以上是关于如何使 WebSphere Application Server 上长时间运行的 Web 请求超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WebSphere Application Server v9 上将 URL http 重定向到 https
如何将用户定义的用户名从 IBM Websphere Application 服务器传递到 AS400 MQ 服务器进行身份验证?
漏洞通告IBM WebSphere Application Server目录遍历漏洞
在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法