rmi调用weblogic的响应时间很长

时间:2013-11-01 09:35:28

标签: java tomcat weblogic rmi

我们正在使用RMI集成到weblogic服务器。我们在tomcat服务器上的webapp中运行客户端。我们在响应时间方面遇到了奇怪的问题。一些请求将在~20ms内响应,但有些将需要10-12秒。在~20ms和10-12秒之间没有响应。

有些事情值得一提

  1. 我们正在使用wlfullclient 10.3.2。我必须删除它中的一些类才能使它在Tomcat上运行。这是一个包含Servlet.class的包。丑陋,我知道,但是我无法使用wlthinclient或其他软件包来处理我的webapp。此外,我们正在使用由中间件人员制作的自定义rmi客户端,它在我们已运行多年的weblogic服务器上运行良好。

  2. 当呼叫需要10-12秒时,似乎在此时间跨度结束之前没有tcp流量。我这里只监控了端口7461。

  3. 我的/ etc / hosts文件中有主机名,所以它不应该是DNS问题

  4. 我只在我们的测试/产品服务器上遇到这种情况,而不是在我的工作站上运行Tomcat上的webapp时

  5. 通过调试问题,似乎挂起发生在weblogic.security.Security.runAs()中。

  6. 编辑: 我抛弃了线程,似乎我对套接字有某种锁定问题。

    "http-bio-8082-exec-45" daemon prio=10 tid=0x0000000002a96000 nid=0x318c runnable [0x00007f09ca8e3000]
       java.lang.Thread.State: RUNNABLE
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        - locked <0x000000076586d0e0> (a java.net.SocksSocketImpl)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
        at java.net.Socket.connect(Socket.java:579)
        at weblogic.socket.SocketMuxer.newSocket(SocketMuxer.java:342)
        at weblogic.socket.ChannelSocketFactory.createSocket(ChannelSocketFactory.java:79)
        at weblogic.socket.BaseAbstractMuxableSocket.createSocket(BaseAbstractMuxableSocket.java:133)
        at weblogic.rjvm.t3.MuxableSocketT3.newSocketWithRetry(MuxableSocketT3.java:206)
        at weblogic.rjvm.t3.MuxableSocketT3.connect(MuxableSocketT3.java:375)
        at weblogic.rjvm.t3.ConnectionFactoryT3.createConnection(ConnectionFactoryT3.java:33)
        at weblogic.rjvm.ConnectionManager.createConnection(ConnectionManager.java:1773)
        at weblogic.rjvm.ConnectionManager.findOrCreateConnection(ConnectionManager.java:1416)
        - locked <0x000000076586c7f8> (a weblogic.rjvm.ConnectionManagerClient)
        - locked <0x000000076586c7f8> (a weblogic.rjvm.ConnectionManagerClient)
        at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:437)
        at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:396)
        at weblogic.rjvm.RJVMImpl.ensureConnectionEstablished(RJVMImpl.java:303)
        at weblogic.rjvm.RJVMImpl.getOutputStream(RJVMImpl.java:347)
        at weblogic.rjvm.RJVMImpl.getRequestStreamInternal(RJVMImpl.java:609)
        at weblogic.rjvm.RJVMImpl.getRequestStream(RJVMImpl.java:560)
        at weblogic.rjvm.RJVMImpl.getOutboundRequest(RJVMImpl.java:786)
        at weblogic.rmi.internal.BasicRemoteRef.getOutboundRequest(BasicRemoteRef.java:159)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:341)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这里的问题是weblogic使用集群中我们在设置中定义的其他节点。有4个节点,我们在防火墙中打开了3个节点。最后一个对我们来说是未知的,当weblogic试图访问它时,它会超时,然后从另一台服务器得到响应。