0

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

有几点值得一提

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

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

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

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

  5. 从调试问题看来,挂起发生在 weblogic.security.Security.runAs() 中。

编辑:我转储了线程,似乎我的套接字存在某种锁定问题。

"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)

有任何想法吗?

4

1 回答 1

0

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

于 2013-11-05T06:44:17.933 回答