У нас есть приложение peopleoft, развернутое на трех идентичных серверах WebLogi c. Балансировка нагрузки устройства netscaler между ними, а также поддержание стабильности сеанса. Поставляемое ушное приложение Peoplesoft поставляется Oracle и не настраивается нами каким-либо образом.
Один из трех веб-серверов демонстрирует исключения ConcurrentModificationException. У нас такое же ухо развернуто на многих других серверах нашего предприятия, но это единственный, который сталкивается с этой проблемой. Проблема настолько серьезна, что нам пришлось держать сервер выключенным и не входить в ферму серверов. Так что теперь мы загружаем баланс между 2 из 3 оригинальных серверов.
Как клиент Oracle, у нас нет доступа к любому из исходного кода . Это затрудняет решение проблемы.
Так как это ухо точно такое же, как уши на правильно функционирующих серверах, я думаю, что «различие» должно быть чем-то вне уха, которое вызывает проблему.
Вот что я понял:
Исключение происходит, когда приложение пытается получить поток из пула соединений JOLT. Этот пул управляется объектом связанного списка java. Поток пытается перебрать связанный список в поисках доступного соединения для подключения к серверу приложений. (Справочная информация: приложение «Peopleoft Ear» (развернутое на сервере приложений WebLogi c) подключается к другому уровню (серверу приложений, состоящему из кода C ++ и java, обменивающегося данными через контролируемые Tuxedo объекты IP C, такие как очереди, разделяемая память ... ) с использованием JOLT. Соединения jolt объединяются для повышения эффективности. Поток завершается ошибкой, прежде чем ему назначается соединение из пула. Другой поток (я полагаю) выполняет итерацию по связанному списку, а затем вызывает исключение ConcurrentModificationException.
Некоторые потоки могут чтобы успешно получить соединение из пула толчков, но при увеличении traffi c возрастает вероятность возникновения исключения ConcurrentModificationException.
Когда я говорю, что что-то проверил, я имею в виду, что сравнивал их с теми же элементами на серверы без проблем
Я проверил многие вещи в поисках причины:
- проверил и переустановил weblogi c
- проверил и переустановил peopletools
- Проверено и переведено d приложениеoplesoft
- Проверьте и переустановите java
- использовали другую версию java
- Проверен путь к классу
- Проверен переменные среды
- Проверены лимиты
- Проверены параметры командной строки java
- Проверены версия операционной системы, технические уровни и версии пакетов обновлений
- проверены наборы файлов ОС
У меня заканчиваются идеи о том, что проверять.
java.util.ConcurrentModificationException java.util.ConcurrentModificationException<br>^M
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:977)^M
at java.util.LinkedList$ListItr.next(LinkedList.java:899)^M
at psft.pt8.net.JoltSessionPool.getJoltSession(JoltSessionPool.java:276)^M
at psft.pt8.net.NetSession.getJoltSession(NetSession.java:693)^M
at psft.pt8.net.NetReqRepSvc.sendRequest(NetReqRepSvc.java:556)^M
at psft.pt8.net.NetService.requestService(NetService.java:167)^M
at psft.pt8.net.NetReqRepSvc.requestService(NetReqRepSvc.java:354)^M
at psft.pt8.jb.JBEntry.processRequest(JBEntry.java:673)^M
at psft.pt8.psc.onActionGen(psc.java:3045)^M
at psft.pt8.psc.onAction(psc.java:1753)^M
at psft.pt8.psc.onAction(psc.java:1742)^M
at psft.pt8.psc.service(psc.java:963)^M
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)^M
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)^M
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)^M
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)^M
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)^M
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)^M
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)^M
at weblogic.websocket.tyrus.TyrusServletFilter.doFilter(TyrusServletFilter.java:274)^M
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)^M
at psft.pt8.psfilter.doFilter(psfilter.java:88)^M
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)^M
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3706)^M
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3672)^M
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:328)^M
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)^M
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)^M
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)^M
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2443)^M
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2291)^M
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2269)^M
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1705)^M
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1665)^M
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272)^M
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)^M
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)^M
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)^M
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)^M
Что, вне уха java, может повлиять на это?