|
|
|
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Имеется 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, ошибка всё равно вылетает. Вобщем буду рад любой инфе и советам, найти хотя бы направление в котором копать... Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2014, 18:26 |
|
||
|
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
|
|||
|---|---|---|---|
|
#18+
GlassFish и "нагрузочное тестирование" это уже звучить смешно. А "EJB-приложение, в котором сервлет" накрывает совершенно. Бага очевидно где-то в GF, который при многопоточной нагруженой инициализации где-то не синхронизирован. Я предполагаю что косяк тут org/apache/felix/framework/ModuleImpl$ModuleClassLoaderJava5 По-моему ClassLoader должен разруливать многопоточную инициализацию вместо с JVM. Но надо читать доку по конкретным модулям, чтобы понять где не хватает синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2014, 18:35 |
|
||
|
InvocationTargetException при многопоточном нагрузочном тестировании ентерпрайз приложения
|
|||
|---|---|---|---|
|
#18+
https://issues.apache.org/jira/browse/FELIX-2653 Поищите также в багтреке GF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2014, 18:36 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2127561]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 331ms |
| total: | 437ms |

| 0 / 0 |
