Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения / 3 сообщений из 3, страница 1 из 1
04.03.2014, 18:26
    #38578179
jjackass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
Доброго времени суток!

Имеется EJB-приложение, в котором сервлет принимает GET-запросы, парсит их, выдирает нужные параметры, дёргает базу данных, получает результат и в ответе формирует XML. Было проведено простенькое нагрузочное тестирование в 40 потоков в секунду на протяжении 5 минут и выяснилось что несколько раз вылетает совершенно не тот результат - сообщение об ошибке что не хватает входящих параметров (запрос при тестировании был одинаковый), то есть результат нашей стандартной проверки на стороне сервлета на соответствие GET-запроса нужному протоколу. Залез в лог Гласфиша, обнаружил вот такой стактрейс на данных вывалах:

#|2014-03-04T14:57:47.442+0200|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=73;_ThreadName=Thread-2;|java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.glassfish.admin.rest.generator.ASMClassWriter.defineClass(ASMClassWriter.java:471)
at org.glassfish.admin.rest.generator.ASMClassWriter.done(ASMClassWriter.java:294)
at org.glassfish.admin.rest.generator.ResourcesGeneratorBase.generateCommandResourceClass(ResourcesGeneratorBase.java:357)
at org.glassfish.admin.rest.generator.ResourcesGeneratorBase.generateCommandResources(ResourcesGeneratorBase.java:301)
at org.glassfish.admin.rest.generator.ResourcesGeneratorBase.generateSingle(ResourcesGeneratorBase.java:100)
at org.glassfish.admin.rest.LazyJerseyInit.generateASM(LazyJerseyInit.java:311)
at org.glassfish.admin.rest.LazyJerseyInit.getResourcesConfigForManagement(LazyJerseyInit.java:255)
at org.glassfish.admin.rest.adapter.RestManagementAdapter.getResourcesConfig(RestManagementAdapter.java:62)
at org.glassfish.admin.rest.adapter.RestAdapter.exposeContext(RestAdapter.java:455)
at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:177)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:238)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor105.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.admin.rest.generator.ASMClassWriter.defineClass(ASMClassWriter.java:452)
... 26 more
Caused by: java.lang.LinkageError: loader (instance of org/apache/felix/framework/ModuleImpl$ModuleClassLoaderJava5): attempted duplicate class definition for name: "org/glassfish/admin/rest/resources/generatedASM/Domain_dumpHk2Resource"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
... 30 more
|#]

В нашем сервлете нигде не юзается рефлексия... Немного подебагав обнаружил что в раз в минуту пропадают куски GET-запроса, соответственно и некорректная работа. В принципе ситуация не критичная, но требует решения :-( Пробовал увеличить в Глэсфиш админ консоли в конфигурации EJB контейнера размер пула до 120, ошибка всё равно вылетает.

Вобщем буду рад любой инфе и советам, найти хотя бы направление в котором копать...

Заранее благодарен!
...
Рейтинг: 0 / 0
04.03.2014, 18:35
    #38578189
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
GlassFish и "нагрузочное тестирование" это уже звучить смешно.
А "EJB-приложение, в котором сервлет" накрывает совершенно.

Бага очевидно где-то в GF, который при многопоточной нагруженой инициализации где-то не синхронизирован.
Я предполагаю что косяк тут
org/apache/felix/framework/ModuleImpl$ModuleClassLoaderJava5
По-моему ClassLoader должен разруливать многопоточную инициализацию вместо с JVM.

Но надо читать доку по конкретным модулям, чтобы понять где не хватает синхронизации.
...
Рейтинг: 0 / 0
04.03.2014, 18:36
    #38578190
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
https://issues.apache.org/jira/browse/FELIX-2653
Поищите также в багтреке GF
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]