|
|
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Привет всем Помогите понять в какую сторону двигаться с анализом проблемы. Есть сервер, на котором запущено 10-к java процессов (в основном в apache tomcat, есть jetty). Периодически возникает в OutOfMemory проблема, можно посмотреть crash-file в аттачменте. Что делать? В какую сторону копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 13:34 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Скорее всего PermGen переполнился и не смог расшириться, что странно. Попробуйте, для начала, увеличить его через -XX:PermSize (начальный размер) и -XX:MaxPermSize (потолок) Код: java 1. 2. Есть ли OutOfMemoryException в логе? Оно случайно ли не падает после обновления приложения в tomcat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 13:44 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Да, проверил несколько крешей и везде не хватает PermGen. То есть нужно поиграться с -XX:PermSize (начальный размер) и XX:MaxPermSize и скорее всего с ratio ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 14:10 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
_chaos_То есть нужно поиграться с -XX:PermSize (начальный размер) и XX:MaxPermSize Зачем играться? Просто выставить начальный размер в нужное для работоспособности сервера значение, а максимальный с небольшим запасом для редеплоя модулей. _chaos_и скорее всего с ratio Нет. Ratio это отношение молодого и старого поколений. Им можно производительность GC тюнить. К этой проблеме отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 14:16 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Blazkowicz_chaos_То есть нужно поиграться с -XX:PermSize (начальный размер) и XX:MaxPermSize Зачем играться? Просто выставить начальный размер в нужное для работоспособности сервера значение, а максимальный с небольшим запасом для редеплоя модулей. Так то оно так, но hotspot загружает в PermGen не все библиотеки сразу, а только часть из них. Нужно сделать полный разогрев приложения и тогда только будет ясно насколько большой нужен PermGen. _chaos_и скорее всего с ratio Нет. Ratio это отношение молодого и старого поколений. Им можно производительность GC тюнить. К этой проблеме отношения не имеет. Да, я ошибся - это из другой оперы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 15:16 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
_chaos_Так то оно так, но hotspot загружает в PermGen не все библиотеки сразу, а только часть из них. Нужно сделать полный разогрев приложения и тогда только будет ясно насколько большой нужен PermGen. Скажу по секрету, даже библиотеки загружает не сразу, а отдельными классами. Но ход мысли верный. Разгореть. Посмотреть размер. Передеплоить, посмотреть рост и спад. Сделать выводы. Задать нужные размеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 15:20 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСкорее всего PermGen переполнился и не смог расшириться, что странно. ??? Смотрю в книгу (лог) и вижу фигу: ...Native memory allocation (malloc) failed to allocate... 1. причем тут PermGen ? 2. зачем увеличивать ? IMHO Вся память выделенна под Java memory (янг и олд heap'ы, permGen, скомпилированный Java код). Собственно программе-интерпретатору Java кода и нативнам библиотекам ничего не оставили. Вывод: УМЕНЬШИТЬ !!! Выделенную память под Java-машину, оставить хоть пару сотен мегабайт для нативной памяти. Ровно это в .log файле и написано! # Possible reasons: # The system is out of physical RAM or swap space # In 32 bit mode, the process size limit was hit # Possible solutions: # Reduce memory load on the system # Increase physical memory or swap space # Check if swap backing store is full # Use 64 bit Java on a 64 bit OS # Decrease Java heap size (-Xmx/-Xms) # Decrease number of Java threads # Decrease Java thread stack sizes (-Xss) # Set larger code cache with -XX:ReservedCodeCacheSize= # This output file may be truncated or incomplete. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 16:44 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
_Частично_ беру свои слова обратно, 64 бит Java я и не заметил. Но все равно, причем PermGen не очень понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 16:54 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev...Native memory allocation (malloc) failed to allocate... 1. причем тут PermGen ? Упало при попытке расширить поколение. Leonid Kudryavtsev2. зачем увеличивать ? Чтобы сразу застолбить достаточно количество. Leonid KudryavtsevВся память выделенна под Java memory (янг и олд heap'ы, permGen, скомпилированный Java код). Собственно программе-интерпретатору Java кода и нативнам библиотекам ничего не оставили. Я не вижу стеке интепретатора. Упал GC при попытке захваьтить ещё памяти. Он ещё в лог должен был сообщить исключение. Но его автор темы не привел. Leonid KudryavtsevВывод: УМЕНЬШИТЬ !!! Выделенную память под Java-машину, оставить хоть пару сотен мегабайт для нативной памяти. JVM x64. Куча в под 4Гб. Чего бы оно падало? Leonid KudryavtsevРовно это в .log файле и написано! Странно. Советов много, а ты болдом только один выделил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 16:54 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Но не полностью. Посмотрел, сколько он хочет выделить: ...to allocate 441 974 784 bytes.... ( примерно 440 Mb) И сколько ниже по логу: /proc/meminfo: MemTotal: 15 343 780 kB (16 Gb сервер) MemFree: 85 924 kB (примерно 84 Mb) Вывод в любом случае один и тот же. Нативная память в серваке похоже забита на пределе. Уменьшать память отданную под компоненты работающие на сервере. IMHO Возможно накладывается то, что parallel GC работает в кучу потоков и каждый поток хочет память выделить. Потоков много - требует много памяти для обработки. IMHO Уменьшить кол-во потоков parallel GC Сложно читать лог с чужой железки, х.з. как сконфигурированной ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 17:00 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСтранно. Советов много, а ты болдом только один выделил Просто думал, что 32 разрядная VM. А там почти 2Gb под Old gen ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 17:01 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev/proc/meminfo: MemTotal: 15 343 780 kB (16 Gb сервер) MemFree: 85 924 kB (примерно 84 Mb) Только хотел аналогичное запостить: Memory: 4k page, physical 15343780k(85924k free), swap 0k(0k free) Вообще 10 Java процессов на такой машине это как-то странно. Стоило наверное сгруппировать и что-то запхать в одну JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 17:02 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУпало при попытке расширить поколение. А где ты это увидел? Я увидел только VM_ParallelGCFailedAllocation PSOldGen ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 17:23 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Хм... интересненько. http://docs.oracle.com/javase/7/docs/technotes/guides/vm/class-data-sharing.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 22:35 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Под виндой CDS вырубается если включена отладка или JVM выдано более -Xms4g. Под линуксами, весьма вероятно, тоже. Если сайты однотипные, то рекомендация запустить их в одной JVM может оказаться самой действенной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 22:40 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Наверное у него 10 stand-alone web-app со встроенными Томкэтами и Джетти на разных портах. В таком случае пожелание свести их в один сервер ставит для него ряд нетривиальных задач. Нужно ковырять код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 22:52 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
Вру, в Java7 ограничение в четыре гигабайта снято: Код: plaintext 1. 2. 3. 4. 5. test.java Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 23:04 |
|
||
|
OutOfMemory
|
|||
|---|---|---|---|
|
#18+
maytonВ таком случае пожелание свести их в один сервер ставит для него ряд нетривиальных задач. Нужно ковырять код.Для tomcat - только если делать через анус. В server.xml прописывается нужное число слушателей, которые привязываются к нужным движкам. Может быть и попарно (один слушатель для каждого движка) и один движок на все слушатели и произвольные комбинации. В jetty, надо полагать, всё совершенно аналогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 23:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38649059&tid=2127147]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 512ms |

| 0 / 0 |
