|
|
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Возникла проблема такого плана. Установил на сервер 2 гигабайта памяти. И Java приложение стало падать с java.lang.OutOfMemoryError: unable to create new native thread . Я уже и лимиты повысил Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Приложение это TCP сервер. Помогите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:12:54 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
А какие-то специальные параметры у JVM прописаны? размер кучи -Xmx permgen -XX:MaxPermSize стэка - -Xss Сколько потоков уже запущено когда падает? При лимите в 2Gb, кучей можно всё отожрать и на потоки будет не хватать памяти процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:17:56 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Примерно 15к потоков. При запуске jar-а никакие параметры не установлены. Просто java -jar app.jar. Помогите пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:19:56 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
-Xss уменьши, но это если потокам не нужен большой стэк, для некоторых особо прожорливых можно засетить в конструкторе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:23:06 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
забыл ник-Xss уменьши, но это если потокам не нужен большой стэк, для некоторых особо прожорливых можно засетить в конструкторе На сколько? Как вообще рассчитать этот параметр? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:24:13 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
GorloPavelПримерно 15к потоков. При запуске jar-а никакие параметры не установлены. Просто java -jar app.jar. Помогите пожалуйста! Фига се. А зачем так много? Они же всё равно большую часть времени у вас спят. Попробуйте тогда дефолтный размер стека уменьшить. -Xss параметр http://www.onkarjoshi.com/blog/209/using-xss-to-adjust-java-default-thread-stack-size-to-save-memory-and-prevent-stackoverflowerror/ Но и об оптимизации приложения тоже стоит подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:25:59 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
-Xss - это размер дефолтного стека потока, по-моему по умолчанию 1 мб, если у вас простенький поток, который особо не жрет память - то это лишняя зарезервированная память, именно она может приводить к аутофмемори. Настраивается в конструкторе Thread или через -Xss, оптимальное значение определяется на практике. То есть допустим ставите для всех 100кб, а для тех кто много жрет памяти передаете в конструктор Thread допустим 2 мб, детали гуглите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:28:22 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGorloPavelПримерно 15к потоков. При запуске jar-а никакие параметры не установлены. Просто java -jar app.jar. Помогите пожалуйста! Фига се. А зачем так много? Они же всё равно большую часть времени у вас спят. Попробуйте тогда дефолтный размер стека уменьшить. -Xss параметр http://www.onkarjoshi.com/blog/209/using-xss-to-adjust-java-default-thread-stack-size-to-save-memory-and-prevent-stackoverflowerror/ Но и об оптимизации приложения тоже стоит подумать. Каждое подключение это поток в котором обрабатываются данные с сокета. + запущен таймер. Максимум подключений сейчас около 5к. Т.е примерно 10к потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:28:59 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
GorloPavelКаждое подключение это поток в котором обрабатываются данные с сокета. + запущен таймер. Максимум подключений сейчас около 5к. Т.е примерно 10к потоков. NIO никак не спасает? Таймеров зачем так много? Проще уже один на какой-то минимальный квант тикать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:31:41 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
забыл ник-Xss - это размер дефолтного стека потока, по-моему по умолчанию 1 мб, если у вас простенький поток, который особо не жрет память - то это лишняя зарезервированная память, именно она может приводить к аутофмемори. Настраивается в конструкторе Thread или через -Xss, оптимальное значение определяется на практике. То есть допустим ставите для всех 100кб, а для тех кто много жрет памяти передаете в конструктор Thread допустим 2 мб, детали гуглите. Спасибо. Тогда почему таких проблем не было на 1Gb ОЗУ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:32:02 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGorloPavelКаждое подключение это поток в котором обрабатываются данные с сокета. + запущен таймер. Максимум подключений сейчас около 5к. Т.е примерно 10к потоков. NIO никак не спасает? Таймеров зачем так много? Проще уже один на какой-то минимальный квант тикать. NIO? Что это? Таймер в каждом потоке нужен для посылки keep-alive пакетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:34:28 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
Выставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 20:38:14 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
GorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы. где-то читал, что на новых версиях java, если не указать параметры, то JVM сам пробует определить, сервер-сайд у вас машина, или клиент сайд, и применяет разные дефолтные опции. Прошлая конфигурация видимо определилась как client, а как добавили памяти - стала server, в этом может быть косяк. Но это лишь предположение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 22:00:04 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
забыл никGorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы. где-то читал, что на новых версиях java, если не указать параметры, то JVM сам пробует определить, сервер-сайд у вас машина, или клиент сайд, и применяет разные дефолтные опции. Прошлая конфигурация видимо определилась как client, а как добавили памяти - стала server, в этом может быть косяк. Но это лишь предположение. Собрать статистику - сколько у вас реально потребляет поток памяти, и выставить чуть большее значение, ну и + NIO правильно советовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 22:01:18 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо за ответы. Как я понимаю для этого необходим профайлер. Ведь можно как-то подключиться к куче процесса и посмотреть что там происходит? Дело в том что приложение находится на удаленном сервере и хотелось бы наблюдать за ним удаленно. Как-то пробовал прикрутить Visual VM, но ничего не получилось. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2012, 03:52:15 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
GorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы. Размер оперативки не особо должен влиять вообще. Ведь ОС должна использовать и виртуальную память. Java сегментирует память. Есть системная для JVM, есть куча, есть пермген, есть память под потоки. Всё это память одного процесса. А OOME падает при нехватки памяти даже в одном из сегметов. Памяти может быть много, но она уже зарезервирована другими сегментами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2012, 13:02:35 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
GorloPavelNIO? Что это? Java API позволяющий использовать минимум потоков для обслуживания максимума клиентов. Обычно используется на серверах где количество коннектов исчесляется тысячами. Хотя в некоторых задачах на линухе тысячи потоков могут справлятся лучше. Только оперативки расходуют больше. GorloPavelТаймер в каждом потоке нужен для посылки keep-alive пакетов. Несколько потоков чудестно бы с этим справились. Им нужно только правильно получать ссылки куда отправлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2012, 13:05:55 |
|
||
|
Проблемы с Java
|
|||
|---|---|---|---|
|
#18+
BlazkowiczРазмер оперативки не особо должен влиять вообще. Ведь ОС должна использовать и виртуальную память. Java сегментирует память. Есть системная для JVM, есть куча, есть пермген, есть память под потоки. Всё это память одного процесса. А OOME падает при нехватки памяти даже в одном из сегметов. Памяти может быть много, но она уже зарезервирована другими сегментами. Т.е вы хотите сказать что ОЗУ чем-то занято? И по этому теперь при наличии 2Gb памяти стали возникать проблемы? Дело в том, что все это дело запущено на VPS XEN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2012, 15:25:20 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37851032&tid=2131494]: |
0ms |
get settings: |
17ms |
get forum list: |
26ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
78ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
93ms |
get tp. blocked users: |
3ms |
| others: | 355ms |
| total: | 614ms |

| 0 / 0 |
