我们正在使用 RMI 集成到 weblogic 服务器。我们在 tomcat 服务器上的 webapp 中运行客户端。我们在响应时间方面遇到了奇怪的问题。有些请求会在大约 20 毫秒内响应,但有些则需要 10-12 秒。大约 20 毫秒到 10-12 秒之间没有响应。
有几点值得一提
我们正在使用 wlfullclient 10.3.2。我必须删除其中的一些类才能使其在 Tomcat 上运行。这是一个带有 Servlet.class 的包。丑陋,我知道,但我无法将我的 webapp 与 wlthinclient 或其他软件包一起使用。此外,我们正在使用中间件人员制作的自定义 rmi 客户端,它在我们已经运行多年的 weblogic 服务器上运行良好。
当一个呼叫需要 10-12 秒时,似乎在此时间跨度结束之前没有 tcp 流量。我这里只监控了7461端口。
我的 /etc/hosts 文件中有主机名,所以它不应该是 DNS 问题
我只在我们的测试/生产服务器上遇到这种情况,而不是在我的工作站上的 Tomcat 上运行 webapp 时
从调试问题看来,挂起发生在 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)
有任何想法吗?