powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / ibm HeapAnalyzer
7 сообщений из 7, страница 1 из 1
ibm HeapAnalyzer
    #38610672
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! У нас проблема с утечкой памяти на WebSphere 7.0.
Пытаюсь анализировать дампы памяти, использую утилиту IBM HeapAnalyzer. Не совсем понятно как она работает. поэтому есть несколько вопросов.
1. Что означает главное дерево объектов ( картинка дерева ), я так понял что в корне идут инстанции классов на которых нет ссылок, а уже от них идут ссылки на другие инстации классов. Если это так, то у меня получается что классы одного проекта ссылаются на классы другого проекта. как такое может быть?
2. в меню Analyze есть пункт Object List ( картинка ), который показывает инстации классов, почему поле totalSize такое большое? что оно вообще обозначает? или это сумма всех классов на которых есть дочерняя ссылка? если это так то 1 вопрос становится еще актуальнее.
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38610681
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще вопрос, в процессах операционки видно что сфера кушает более 4гб физической памяти, не считая виртуальной, там более 8гб. а дамп получается всего 500 мб. почему так?
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38611318
wasadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhas,
авторв процессах операционки видно что сфера кушает более 4гб физической памяти, не считая виртуальной, там более 8гб. а дамп получается всего 500 мб. почему так?
Во-первых, надо понимать, что ваш heap dump - это совсем не снимок хипа как области памяти. Это лишь некое представление этой области. Будем считать, схема. Пусть IBM отдувается:
авторBoth Heapdump formats contain a list of all object instances in the heap, including each object address, type or class name, size, and references to other objects. The Heapdumps also contain information about the version of the JVM that produced the Heapdump. They do not contain any object content or data other than the class names and the values (addresses) of the references.
Во-вторых, есть два формата у IBM - классик и портэйбл. Первый - в текстовом виде, второй - в бинарном. Соответственно, второй занимает еще меньше места.
Если вы говорите о том, сколько и что сфера "кушает", учтите, помимо хипа - стек тредов, мусорку (Garbage Collection), нативную память, PermGen и прочее.
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38611972
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то я поторопрился с кучей
ошибка звучит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
java.lang.OutOfMemoryError: native memory exhausted
	at java.lang.ClassLoader.defineClassImpl(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
	at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:775)
	at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:690)
	at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:513)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
	at com.fasterxml.jackson.databind.introspect.AnnotatedClass.construct(AnnotatedClass.java:138)
	at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forClassAnnotations(BasicClassIntrospector.java:113)
	at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forClassAnnotations(BasicClassIntrospector.java:11)
...



Это проблемы с native memory, на сколько я понял это память с которой работают нативные вызовы т.е. тот же пакет nio.

Поставил IBM Monitoring and Diagnostic Tools и запустил отчеты NativeMemAnalysis_extended.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Отчет показал 
1. Наблюдения 
    Большое количество нитей ОС (>100). Возможно, имеет место утечка нитей: Большое количество нитей ОС: 253 
    Большое количество нитей Java (>100). Возможно, имеет место утечка нитей: Большое количество нитей Java: 249 

2. Результаты анализа 
    DumpAnalyzer V:2.2.2.20131025151944 : начало анализа C:\Users\olzhas.tatagulov\Desktop\node1_heapdump_Core\javacore.20140409.153001.1776.0020.txt 
       
2.1. Результаты (анализатор com.ibm.dtfj.analyzer.jvm.memory.NativeMemAnalysis_Extended) 
Полное имя анализатора: com.ibm.dtfj.analyzer.jvm.memory.NativeMemAnalysis_Extended 
Версия анализатора: 0.0.1.20090701-EXPERIMENTAL(beta) 
Описание анализатора: NativeMemAnalysis_Extended: специализированный отчет для анализа машинной памяти (подробный вариант) 
   
2.1.1. Overall summary of memory usage 
	All allocated regions (bytes): 2358270908   (2302998 KB)   Number of regions: 20116   

	All free regions (bytes): 140219440485444   (136933047349 KB)   Number of free regions: 8829   
   
	Libraries (bytes): 0   (0 bytes)   Number of libraries: 31   
	Java Heaps (bytes): 0   (0 bytes)   Number of heaps: 0   
	Native thread stacks (bytes): 77303808   (75492 KB)   Number of native threads: 253   Большое количество нитей ОС (>100). Возможно, имеет место утечка нитей: Большое количество нитей ОС: 253   
	Java thread stacks (bytes): 0   (0 bytes)   Number of Java threads: 249   Большое количество нитей Java (>100). Возможно, имеет место утечка нитей: Большое количество нитей Java: 249   
	Compiled methods (bytes): 0   (0 bytes)   Number of compiled methods: 0   
	Bytecodes for methods (bytes): 0   (0 bytes)   Number of methods with non-null bytecodes: 0   
	Class objects (estimated) (bytes): 0   (0 KB)   Number of class objects: 56580   
 
	All identified regions (bytes): 77303808   (75492 KB)   
	All unidentified regions (bytes): 2280967100   (2227506 KB)   


2.1.2. Library sections details 
	Total number of sections: 0 
	Invalid sections found: 0 
	Sections inside a Java heap: 0 

2.1.3. Heap sections details 
	Total number of sections: 0 
	Invalid sections found: 0 
	Sections inside a Java heap: 0 

2.1.4. Native thread stacks details 
	0x00007F873D750000-0x00007F873D790FFF (260 KB) "Native stack section" 
...
	0x00007F87D83EC000-0x00007F87D842CFFF (260 KB) "Native stack section" 
	0x00007F87DBA89000-0x00007F87DBB89FFF (1028 KB) "Native stack section" 
	0x00007F87EDE12000-0x00007F87EE812FFF (10244 KB) "Native stack section" 
	Total number of sections: 249 
	Invalid sections found: 0 
	Sections inside a Java heap: 0 

2.1.5. Java thread stacks details 
	Total number of sections: 0 
	Invalid sections found: 0 
	Sections inside a Java heap: 0 

2.1.6. Counting all methods with bytecodes 
	Total number of methods: 567 
	Number of methods with any bytecodes: 0 
	Number of methods with non-null bytecodes: 0 
	Total sections: 0 

2.1.7. Scanning all memory references from native threads 
	Total references checked: 3485 
	Potential invalid references found: 3463 

2.1.8. Scanning all memory references from Java threads 
	Total references checked: 249 
	Potential invalid references found: 249 

2.1.9. Scanning all compiled methods sections 
	Total number of sections: 0 
	Invalid sections found: 0 

2.1.10. Scanning all class objects 
	Number of class objects: 56580 
	Invalid references found: 0 

2.1.11. Global memory regions details 
...

2.1.12. Objects that contain native methods (excluding java/lang/*) 
		Total classes scanned: 0 
		Total instances scanned: 0 
		Total classes with native methods: 0 
		Total instances with native methods: 0 
		Object instances with native methods (excluding java/lang/*):  
3. Ошибки 
    Элемент данных повреждены : 65173 



Обращаю внимание на на большее количество нитей >100 это нормально или действиельно есть утечка?
Так же пункт 2.1.6 и 2.1.7 большее количество потенциальных инвалидных ссылок, по ним тоже есть отчет, выдает такое

Код: java
1.
2.
 Некорректный указатель: указывает на адрес, не принадлежащий диапазонам допустимых адресов: Procedure address for native stack frame: thread 0x80c (0x00007F87ED72DF62) 
    Некорректный указатель: указывает на адрес, не принадлежащий диапазонам допустимых адресов: Procedure address for native stack frame: thread 0x80c (0x00007F87ED7386F1) 


по нему я тоже ничего не могу понять.

по пункту 3 тоже не понятно что за элемент данных поврежден?

Что за паять такая native? и кто ее может забить? какой параметр при запуске jvm указывает размер native memory?
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38611977
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olzhas,

Так же в параметрах запуска jvm нашел ключ -Xscmx50M
"java -X" говорит что "-Xscmx<x> установить размер кэша нового общего класса равным <x>", может это как то влиять на размер native memory?
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38612685
chro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olzhas,
как вариант, дело не в нативной памяти, а в том что Jackson в бесконечном циклеolzhas com.fasterxml.jackson.databind.introspect.AnnotatedClass.construct
строит классы по аннотациям и там какой-нить цикл зависимостей.

про нативную память здесь http://www.ibm.com/developerworks/library/j-nativememory-linux/
...
Рейтинг: 0 / 0
ibm HeapAnalyzer
    #38614403
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chro,

сомневаюсь что проблема в jackson. Я привел лишь частный случай StackTrace. На самом деле важно именно первые строки.

Код: java
1.
2.
3.
4.
java.lang.OutOfMemoryError: native memory exhausted
	at java.lang.ClassLoader.defineClassImpl(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
...


такие же ошибки выходят и на других участках кода, где jackson нету.

почитав статью (кстати вот она на русском языке) понял что у IBM VM нету PermGen Space, а классы создаются в системной (native) памяти. Вот и получается что системная память заканчивается и java не может загрузить новый класс, при чем у меня есть подозрение, что он пытается загрузить уже загруженные классы, но который лежит в другом ClassLoader. Профилировать системную память ох как не просто.

И еще у меня в дампе показывает

Код: java
1.
2.
Number of loaded classes in Java heap : 56 588  
Number of classloaders in Java heap : 1 746



Ладно с количество классов еще нормально, а вот 1746 класслоудеров? от куда столько? или это нормально для WebSphere?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / ibm HeapAnalyzer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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