|
|
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
Добрый день! У меня есть два класса: A и B. Класс А вызывает В, в классе В есть строчка: Код: java 1. Через некоторое время вылетает ошибка Out of Memory при вызове класса B. С помощью профайлера установил, что класс В в heap не накапливается, а вот экземпляры MBeanServerInvocationHandler из heap не удаляются. Если эту строчку закомментировать, то ошибка out of Memory не появляется и никаких других экземпляров класса А и В в памяти не копиться. Помогите разобраться почему GC не очищает heap от MBeanServerInvocationHandler. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 10:43 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
Удалось найти следующее: Проблема возникает при создании нового connection. Т.е. в классе A есть следующий вызов методов класса B Код: java 1. 2. 3. 4. 5. 6. 7. 8. Класс В выглядит следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Если вызвать несколько раз метод Invoke() из класса A, то в памяти останется столько же классов MBeanServerInvocationHandler сколько было вызовов. Если же изменить класс А следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И затем вызывать метод invoke(), то в heap будет только один экземпляр класса MBeanServerInvocationHandler. Так как по задаче, мне нужно создавать несколько различных коннекшенов, то обошел эту ситуацию созданием списка объектов класса В и первоначальной их инициализацией и далее по шедулеру происходит вызов метода run() из В. Способ явно костыльный, так как коннекшены иногда "портятся" и приходится создавать новые, что в итоге опять приводит к накоплению памяти, но уже не так быстро. Понять причины почему GC не очищает MBeanServerInvocationHandler пока так и не удалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:39 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
Запускаешь свой сервер локально. Создаешь утечку. Запускаешь JDK/bin/jvisualvm.exe локально Выбираешь Java процесс своего сервера из списка - соединяешься с ним Нажимаешь кнопку [Dump Heap] Открываешь дамп кучи, сортируешь по имени класса, открываешь свой MBeanServerInvocationHandler, который утекает. Открываешь просмотр экземпляров, выбираешь любой. Справа внизу - Right Click -> Find Nearest GC Root ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:51 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
conn.unregisterMBean не пробовали пользовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:55 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Пробовал, но видимо как-то не так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Получаю ошибку: Exception in thread "main" weblogic.management.NoAccessRuntimeException: [JMX:149518]An attempt was made to unregister the com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean WLS MBean through JMX. at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:223) at javax.management.remote.rmi.RMIConnectionImpl_1033_WLStub.unregisterMBean(Unknown Source) at weblogic.management.remote.common.RMIConnectionWrapper$6.run(ClientProviderBase.java:582) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.security.Security.runAs(Security.java:61) at weblogic.management.remote.common.RMIConnectionWrapper.unregisterMBean(ClientProviderBase.java:580) at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.unregisterMBean(RMIConnector.java:766) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 13:23 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
Значит это не то. Надо в дампе смотреть чем ваш прокси к серверу прибит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 14:18 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
irogerg, А connector.close() делается где-то? В примере этого не делается, после invoke висит соединение открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 14:55 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
0FDirogerg, А connector.close() делается где-то? В примере этого не делается, после invoke висит соединение открытым. Это точно не помогает - проверял. Коннекшн обнуляется, а прокси остается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 15:35 |
|
||
|
MBeanServerInvocationHandler ошибка out of memory
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЗначит это не то. Надо в дампе смотреть чем ваш прокси к серверу прибит. Умений не хватает :) Пока дамп для меня подобен "темному лесу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 15:36 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=141&tid=2125839]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
17ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 316ms |

| 0 / 0 |
