Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java rmi对weblogic的调用响应时间长_Java_Tomcat_Weblogic_Rmi - Fatal编程技术网

Java rmi对weblogic的调用响应时间长

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或其他软件包一起使用。此外,我们正

我们正在使用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)
    
    “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端运行探查器或调试器。