2013-11-01 3 views
0

Мы интегрируемся в веб-сервер с использованием RMI. Мы запускаем клиента в webapp на сервере tomcat. У нас странные проблемы со временем ответа. Часть запроса ответит в ~ 20 мс, но некоторые из них займут 10-12 секунд. Нет ответов между ~ 20 мс и 10-12 секунд.Высокое время отклика на вызовы rmi на weblogic

Несколько вещей, о которых стоит упомянуть

  1. Мы используем wlfullclient 10.3.2. Мне пришлось удалить некоторые классы, чтобы он мог работать на Tomcat. Это был пакет с Servlet.class. Ужасно, я знаю, но я не смог взять свою работу с помощью wap или других пакетов. Кроме того, мы используем пользовательский клиент rmi, созданный реестрами промежуточного программного обеспечения, и он хорошо работает на сервере weblogic, который мы запускаем целую вечность.

  2. Когда вызов длится 10-12 секунд, кажется, что до начала этого периода времени нет трафика tcp. Я только контролировал порт 7461 здесь.

  3. У меня есть имена хостов в моей/и т.д./хосты файл, так что не должно быть проблемой DNS

  4. Я испытываю это только на нашем тестовом сервере/прод, не тогда, когда я бегу на веб-приложение Tomcat на моей рабочей станции

  5. От отладки проблемы кажется, что зависание происходит в weblogic.security.Security.runAs().

Edit: я бросил нить, и, кажется, у меня есть какие-то блокировки проблемы с розеткой.

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

Любые идеи?

+0

Посмотрите на следующее сообщение, чтобы узнать, что я сделал с wlfullclient: http://stackoverflow.com/questions/19137191/rmi-from-tomcat-to-weblogic – user1682170

+0

Почему RMI? Это своего рода наследие, а не брандмауэр. Не можете ли вы создать некоторую оболочку REST/SOAP, развернутую в weblogic, чтобы интегрироваться с этим приложением? Я уверен, что полный клиент WLS довольно тяжелый, и он будет больше, чем ваше приложение для интеграции. –

+0

Если вы подозреваете, что медлительность связана с безопасностью, то это может быть ваша безопасность домена WebLogic, которая удерживает ее. Трудно ничего советовать, не зная подробностей. Постарайтесь максимально упростить параметры безопасности для домена и развернутого приложения. –

ответ

0

Проблема заключалась в том, что weblogic использует другие узлы в кластере, что мы определили в настройке. Было 4 узла, которые мы открыли для 3 из них в брандмауэре. Последнее было неизвестно для нас, и когда weblogic попытался получить к нему доступ, он был отключен, а затем получил ответ от другого сервера.

Смежные вопросы