我们的应用程序运行在8节点Weblogic集群中,并尝试与RMI服务器通信。由于RMI服务器中的错误,执行此操作的线程被卡住。我们正试图解决这个问题,但问题是在那之前,卡住的线程会减慢应用程序的速度,最终导致整个集群瘫痪。
我的问题是‘我们如何从客户端确保线程被释放?’
任何帮助都非常感谢。
实现细节:-Weblogic 10.0MP2,具有8个节点的集群-Java 1.5
线程转储代码段:
"[STUCK] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=3 tid=0x03808610 nid=0x1c9 runnable [0
x3ed4e000..0x3ed4faf0]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
- locked <0xa0a515a0> (a java.io.BufferedInputStream)
at java.io.DataInputStream.readByte(DataInputStream.java:241)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:189)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at com.kpno.in.iac.CustomerBridge.CustomerBridge.RemoteDecorator_Stub.sendMessage(Unknown Source)
at com.kpno.in.iac.CustomerBridge.RMIServer.CustomerBridgeProxy.sendMessage(Unknown Source)
应用程序代码段(反编译):
public final class RemoteDecorator_Stub extends RemoteStub
implements ...
{
...
public Map sendMessage(String paramString1, String paramString2, Map paramMap)
throws InvalidActionException, ProcessingException, PropagationException, ResponseException, TimeoutException, RemoteException
{
try
{
Object localObject = this.ref.invoke(this, $method_sendMessage_2, new Object[] { paramString1, paramString2, paramMap }, 6494150482049562645L);
return (Map)localObject;
}
catch ...
更新
我曾尝试像托利斯建议的那样使用JNDI查找,但直到现在我都没有成功。我想知道url应该是什么。从RMI命名中检索如下:java.RMI.naming.lookup(“//host:port/FactoryObject”)
如何将其转换为JNDI url?我试过用t3作为协议,用iiop。什么都没用。我总是会遇到命名异常。
在t3的情况下,我得到这个异常:[根异常是java.net.ConnectException:t3://host:port:目标无法到达;嵌套异常是:java.io.IOException:空服务器回复;没有可用的路由器到目的地]
对于iiop,我得到了一个例外:javax.naming。通信异常:无法连接到ORB[根异常为org.omg.CORBA.COMM\u失败:vmcid:SUN次要代码:201已完成:否]
有什么想法吗?
您可以使用weblogic.rmi.client超时设置,以避免目标服务器出现问题时出现线程卡住的情况。
编辑:
当您尝试从套接字读取并且没有从服务器获得任何响应时,另一个有用的解决方案如下:
RMI运行时使用RMISocketFactory实例来获取RMI调用的客户端和服务器套接字。应用程序可以使用setSocketFactory方法来请求RMI运行时使用其套接字工厂实例而不是默认实现。
实施示例:
RMISocketFactory.setSocketFactory(new RMISocketFactory()
{
public Socket createSocket(String host, int port) throws IOException {
Socket s = new Socket();
s.setSoTimeout(timeoutInMilliseconds);
s.setSoLinger(false, 0);
s.connect(new InetSocketAddress(host, port), timeoutInMilliseconds);
return s;
}
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port);
}
});
setSocketFactory设置RMI从中获取套接字的全局套接字工厂。
也许这是一个已经回答了的问题,但我仍然无法找到解决这个简单问题的方法。我如何使用v-for循环访问这个JSON对象并打印每个汽车品牌和“instock”值?
问题内容: 我遇到了IE版本11随机卡在某些页面上的问题。该代码工作正常,因为每当我重新启动该程序时,有时它就可以工作,但最烦人的将是在单击并加载页面后随机卡住。在IE上正常吗?使用Chrome时,我从未遇到过此类问题。但是此网站仅适用于IE。我能知道这个问题的原因是驱动程序吗?网站本身吗?还是网络安全? 问题答案: 使用 Internet Explorer v11时 ,需要使用“ 必需的配置”配
问题内容: 在 pipe 上使用2个 队列 在进程之间进行通信有什么优势(如果有)? 我正在计划使用python模块。 问题答案: 最大的好处是队列是进程和线程安全的。管道不是:如果两个不同的进程试图读取或写入pipe的同一端,则会发生不良情况。队列的抽象级别也比管道更高,这在您的特定情况下可能有优势,也可能没有优势。
问题内容: 我正在考虑AJAX应用程序必须轮询轮询更新有多大限制,而最理想的是javascript能够建立与服务器的真正双向连接。我想知道是否存在将javascript与可以建立tcp连接的浏览器插件集成的方法,以便可以将数据传入和传出浏览器插件。 问题答案: 这是具有类似方法的实现: 套接字 它使用Java Applet,并将其API桥接到JavaScript,有趣的是… 这里是另一个: 套接字
我有一个很快的问题——有人试过同时运行这两个版本吗。x2和垂直。集群中的x 3应用程序,通过EventBus进行通信? 理论上这应该是可能的,但有人做过吗?;) 干杯,米莎
我有两个cardlets Java卡,在同一个智能卡上,我想进行通信。 我可以选择一个小程序,然后发送相应的APDU,然后取消选择它并选择另一个等等...我想知道是否可以使用逻辑通道更正确地完成它?我的意思是使用一种可以允许我不为每个APDU命令选择/取消选择每个小程序的方法? 提前感谢:)