Java rmi对weblogic的调用响应时间长
我们正在使用RMI集成weblogic服务器。我们正在tomcat服务器上的webapp中运行客户端。我们在响应时间上遇到了奇怪的问题。有些请求将在约20毫秒内响应,但有些请求需要10-12秒。在~20毫秒到10-12秒之间没有响应 有几件事值得一提Java rmi对weblogic的调用响应时间长,java,tomcat,weblogic,rmi,Java,Tomcat,Weblogic,Rmi,我们正在使用RMI集成weblogic服务器。我们正在tomcat服务器上的webapp中运行客户端。我们在响应时间上遇到了奇怪的问题。有些请求将在约20毫秒内响应,但有些请求需要10-12秒。在~20毫秒到10-12秒之间没有响应 有几件事值得一提 我们正在使用wlfullclient 10.3.2。我必须删除其中的一些类才能使它在Tomcat上运行。这是一个包含Servlet.class的包。丑陋,我知道,但我无法将我的webapp与wlthinclient或其他软件包一起使用。此外,我们正
"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)
“http-bio-8082-exec-45”守护进程prio=10 tid=0x0000000002a96000 nid=0x318c可运行[0x00007f09ca8e3000]
java.lang.Thread.State:可运行
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
-锁定(一个java.net.socksocketimpl)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
位于java.net.socksocketimpl.connect(socksocketimpl.java:391)
位于java.net.Socket.connect(Socket.java:579)
位于weblogic.socket.SocketMuxer.newSocket(SocketMuxer.java:342)
位于weblogic.socket.ChannelSocketFactory.createSocket(ChannelSocketFactory.java:79)
位于weblogic.socket.BaseAbstractMuxableSocket.createSocket(BaseAbstractMuxableSocket.java:133)
位于weblogic.rjvm.t3.MuxableSocketT3.newSocketWithRetry(MuxableSocketT3.java:206)
位于weblogic.rjvm.t3.MuxableSocketT3.connect(MuxableSocketT3.java:375)
位于weblogic.rjvm.t3.ConnectionFactoryT3.createConnection(ConnectionFactoryT3.java:33)
在weblogic.rjvm.ConnectionManager.createConnection(ConnectionManager.java:1773)
位于weblogic.rjvm.ConnectionManager.findOrCreateConnection(ConnectionManager.java:1416)
-锁定(weblogic.rjvm.ConnectionManager客户端)
-锁定(weblogic.rjvm.ConnectionManager客户端)
位于weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:437)
位于weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:396)
在weblogic.rjvm.RJVMImpl.com上建立了重新连接(RJVMImpl.java:303)
位于weblogic.rjvm.RJVMImpl.getOutputStream(RJVMImpl.java:347)
位于weblogic.rjvm.RJVMImpl.getRequestStreamInternal(RJVMImpl.java:609)
位于weblogic.rjvm.RJVMImpl.getRequestStream(RJVMImpl.java:560)
位于weblogic.rjvm.RJVMImpl.getOutboundRequest(RJVMImpl.java:786)
位于weblogic.rmi.internal.BasicRemoteRef.getOutboundRequest(BasicRemoteRef.java:159)
位于weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:341)
在weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
有什么想法吗 这里的问题是weblogic使用集群中我们在设置中定义的其他节点。共有4个节点,我们已在防火墙中为其中3个节点打开。最后一个对我们来说是未知的,当weblogic试图访问它时,它超时,然后从另一台服务器得到响应。请看下面的帖子,了解我对wlfullclient做了什么:为什么使用RMI?这是一种传统,不利于防火墙。您不能创建一些部署在weblogic上的REST/SOAP包装器来与该应用程序集成吗?我打赌full-WLS客户端相当重,它将比你的集成应用程序大得多。如果你怀疑慢是与安全相关的,那么可能是你的WebLogic域安全问题阻碍了它。如果不知道更多细节,就很难提出任何建议。尽量简化域和已部署应用程序的安全设置。WLS客户端很重,但使用SOAP包装器是我们尝试过的,我不想在这里讨论这个解决方案。我现在不怀疑安全问题,在看到线程挂起在socketConnect()上之后,我会认为有什么东西挂在该套接字上。好吧,socketConnect是一种只等待建立连接的方法,它什么也没说,但JVM正在等待网络I/O。我会尝试收集更多线程转储,或者在weblogic端运行探查器或调试器。