gpt4 book ai didi

java - Websphere 挂起线程 - WASJSPExtensionServletWrapper 上的监视器锁定

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:16 27 4
gpt4 key购买 nike

全部,

我在 JSF 2.0 应用程序的 Websphere 8.5.5.5 中收到间歇性挂起的线程:

Thread Name
WebContainer : 8
State
Waiting on condition
Monitor
Owns Monitor Lock on com/ibm/ws/jsp/webcontainerext/ws/WASJSPExtensionServletWrapper@0x0000000109FF9FE0
Java Stack
at java/lang/Thread.sleep(Native Method)
at java/lang/Thread.sleep(Thread.java:904(Compiled Code))
at com/ibm/ws/webcontainer/servlet/ServletWrapper.doDestroy(ServletWrapper.java:1019(Compiled Code))
at com/ibm/ws/webcontainer/servlet/ServletWrapperImpl.doDestroy(ServletWrapperImpl.java:337(Compiled Code))
at com/ibm/ws/webcontainer/servlet/ServletWrapper.prepareForReload(ServletWrapper.java:1112(Compiled Code))
at com/ibm/wsspi/webcontainer/servlet/GenericServletWrapper.prepareForReload(GenericServletWrapper.java:132(Compiled Code))
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper._checkForTranslation(AbstractJSPExtensionServletWrapper.java:529(Compiled Code))
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper.checkForTranslation(AbstractJSPExtensionServletWrapper.java:294(Compiled Code))
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:163(Compiled Code))

由于争夺 1 个监视器锁,此 WebContainer #8 线程阻塞了大约 72 个其他 WebContainer 线程。这锁定了共享对象WASJSPExtensionServletWrapper

由于上述错误的位置,我假设这是在 JSP 标记转换期间发生的,可能是在运行缓慢的自定义标记或 Rich Faces 4.3.2 标记(AJAX 调用 a4j)期间发生的,导致 Servlet 缓慢重新加载并由于上下文切换而挂起?

在自定义标记中,由于对 VariableResolver 的调用已弃用(我随后将其更改为 ELResolver),我偶尔会遇到 TreeMap 错误。在 Rich Faces AJAX 调用中,我看到了以下不同步的代码:

Map<String,String> data = new HashMap<String,String>();
data.put("customerSum", collectedBalance);

后面是执行 get 操作的代码:

JSONObject dataToJSON = new JSONObject()
dataToJSON.put("customerSum", data.get("customerSum"));

但是,我经历了一段糟糕的时光:(1)通过确凿证据证明确凿证据是TreeMap.putHashMap.put还是get?(2)重现问题?

什么会导致 Servlet 在 JSP 标记 _checkForTranslation 之后立即重新加载?这是否是由于遇到错误或 NullPointerException 或无限循环而重新加载?我在 SystemOut.log 中没有清楚地看到任何内容。

自从我更改为 ElResolver 并删除了该 HashMap 的 AJAX 调用后,我还没有看到这个问题。然而,我需要能够证明根本原因吗? (我也不介意能够放回 AJAX 调用?)我也不确定这是否可能只是由于大量请求(由于 AJAX 调用的数量?)而不是由于运行缓慢的自定义标记?但流量不大。

任何帮助或建议将不胜感激。 。 。谢谢。

PS 我知道 Rich Faces 已经停产,但替换它需要时间,也许在未来的项目中。 。 .

更新 8/3/2016:今天我们注意到生产服务器中的 JSP 页面 .class 文件不断被重新编译和重新加载。这是没有必要的,也不应该是这样的。调查这是否可能设置导致销毁/重新加载 JSP 页面 servlet 时间歇性挂起线程的条件。

最佳答案

对于每个请求重新编译的 JSP,您应该查看 APAR PI12939 以查看是否适用于您的环境。

http://www-01.ibm.com/support/docview.wss?uid=swg1PI12939

如果 JSP 最初是使用一个用户编译的,而服务器在另一个用户中运行,那么 JSP 容器可能很难更新 .class 文件的时间戳...因此导致它认为 JSP 在每个请求上都已过期,并尝试重新翻译和重新编译。可以设置一个 JSP 属性来缓解这种情况:

要启用此行为,必须使用以下 JSP 属性设置为“真”:重新编译前删除ClassFiles

在应用程序的 ibm-web-ext.xml 文件中设置该 JSP 属性。请注意,如果您要更新已安装的应用程序,请更新嵌套在配置文件的 config 目录中的 ibm-web-ext.xml 文件版本,而不是 InstalledApps 目录。

另一个选项是将 reloadEnabled JSP 属性设置为 false。这将阻止 JSP 容器连续检查 JSP 是否需要重新编译。然而,这只是掩盖了真正的问题。

关于java - Websphere 挂起线程 - WASJSPExtensionServletWrapper 上的监视器锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com