Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с Java / 18 сообщений из 18, страница 1 из 1
22.06.2012, 20:12:54
    #37851021
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
Здравствуйте. Возникла проблема такого плана. Установил на сервер 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.
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 100000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited



Приложение это TCP сервер. Помогите пожалуйста.
...
Рейтинг: 0 / 0
22.06.2012, 20:17:56
    #37851024
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
А какие-то специальные параметры у JVM прописаны?
размер кучи -Xmx
permgen -XX:MaxPermSize
стэка - -Xss
Сколько потоков уже запущено когда падает?

При лимите в 2Gb, кучей можно всё отожрать и на потоки будет не хватать памяти процесса.
...
Рейтинг: 0 / 0
22.06.2012, 20:19:56
    #37851026
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
Blazkowicz,

Примерно 15к потоков. При запуске jar-а никакие параметры не установлены. Просто java -jar app.jar. Помогите пожалуйста!
...
Рейтинг: 0 / 0
22.06.2012, 20:23:06
    #37851030
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
-Xss уменьши, но это если потокам не нужен большой стэк, для некоторых особо прожорливых можно засетить в конструкторе
...
Рейтинг: 0 / 0
22.06.2012, 20:24:13
    #37851032
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
забыл ник-Xss уменьши, но это если потокам не нужен большой стэк, для некоторых особо прожорливых можно засетить в конструкторе
На сколько? Как вообще рассчитать этот параметр? Спасибо!
...
Рейтинг: 0 / 0
22.06.2012, 20:25:59
    #37851034
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
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/
Но и об оптимизации приложения тоже стоит подумать.
...
Рейтинг: 0 / 0
22.06.2012, 20:28:22
    #37851038
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
-Xss - это размер дефолтного стека потока, по-моему по умолчанию 1 мб, если у вас простенький поток, который особо не жрет память - то это лишняя зарезервированная память, именно она может приводить к аутофмемори. Настраивается в конструкторе Thread или через -Xss, оптимальное значение определяется на практике. То есть допустим ставите для всех 100кб, а для тех кто много жрет памяти передаете в конструктор Thread допустим 2 мб, детали гуглите.
...
Рейтинг: 0 / 0
22.06.2012, 20:28:59
    #37851039
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
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к потоков.
...
Рейтинг: 0 / 0
22.06.2012, 20:31:41
    #37851043
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
GorloPavelКаждое подключение это поток в котором обрабатываются данные с сокета. + запущен таймер. Максимум подключений сейчас около 5к. Т.е примерно 10к потоков.
NIO никак не спасает? Таймеров зачем так много? Проще уже один на какой-то минимальный квант тикать.
...
Рейтинг: 0 / 0
22.06.2012, 20:32:02
    #37851044
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
забыл ник-Xss - это размер дефолтного стека потока, по-моему по умолчанию 1 мб, если у вас простенький поток, который особо не жрет память - то это лишняя зарезервированная память, именно она может приводить к аутофмемори. Настраивается в конструкторе Thread или через -Xss, оптимальное значение определяется на практике. То есть допустим ставите для всех 100кб, а для тех кто много жрет памяти передаете в конструктор Thread допустим 2 мб, детали гуглите.

Спасибо. Тогда почему таких проблем не было на 1Gb ОЗУ?
...
Рейтинг: 0 / 0
22.06.2012, 20:34:28
    #37851047
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
BlazkowiczGorloPavelКаждое подключение это поток в котором обрабатываются данные с сокета. + запущен таймер. Максимум подключений сейчас около 5к. Т.е примерно 10к потоков.
NIO никак не спасает? Таймеров зачем так много? Проще уже один на какой-то минимальный квант тикать.
NIO? Что это? Таймер в каждом потоке нужен для посылки keep-alive пакетов.
...
Рейтинг: 0 / 0
22.06.2012, 20:38:14
    #37851048
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
Выставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы.
...
Рейтинг: 0 / 0
22.06.2012, 22:00:04
    #37851102
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
GorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы.

где-то читал, что на новых версиях java, если не указать параметры, то JVM сам пробует определить, сервер-сайд у вас машина, или клиент сайд, и применяет разные дефолтные опции. Прошлая конфигурация видимо определилась как client, а как добавили памяти - стала server, в этом может быть косяк. Но это лишь предположение.
...
Рейтинг: 0 / 0
22.06.2012, 22:01:18
    #37851105
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
забыл никGorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы.

где-то читал, что на новых версиях java, если не указать параметры, то JVM сам пробует определить, сервер-сайд у вас машина, или клиент сайд, и применяет разные дефолтные опции. Прошлая конфигурация видимо определилась как client, а как добавили памяти - стала server, в этом может быть косяк. Но это лишь предположение.

Собрать статистику - сколько у вас реально потребляет поток памяти, и выставить чуть большее значение, ну и + NIO правильно советовали.
...
Рейтинг: 0 / 0
23.06.2012, 03:52:15
    #37851267
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
Огромное спасибо за ответы. Как я понимаю для этого необходим профайлер. Ведь можно как-то подключиться к куче процесса и посмотреть что там происходит? Дело в том что приложение находится на удаленном сервере и хотелось бы наблюдать за ним удаленно. Как-то пробовал прикрутить Visual VM, но ничего не получилось. Спасибо.
...
Рейтинг: 0 / 0
23.06.2012, 13:02:35
    #37851389
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
GorloPavelВыставил -Xss100k. Вроде не падает. Спасибо. Но как рассчитать на сколько потоков хватит 2Gb ОЗУ в таком случае? Дело в том что программа падала в Out of Memory с огромным количеством свободной оперативки. Почему так происходит? Спасибо за ответы.
Размер оперативки не особо должен влиять вообще. Ведь ОС должна использовать и виртуальную память.
Java сегментирует память. Есть системная для JVM, есть куча, есть пермген, есть память под потоки. Всё это память одного процесса. А OOME падает при нехватки памяти даже в одном из сегметов. Памяти может быть много, но она уже зарезервирована другими сегментами.
...
Рейтинг: 0 / 0
23.06.2012, 13:05:55
    #37851393
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
GorloPavelNIO? Что это?

Java API позволяющий использовать минимум потоков для обслуживания максимума клиентов. Обычно используется на серверах где количество коннектов исчесляется тысячами. Хотя в некоторых задачах на линухе тысячи потоков могут справлятся лучше. Только оперативки расходуют больше.

GorloPavelТаймер в каждом потоке нужен для посылки keep-alive пакетов.
Несколько потоков чудестно бы с этим справились. Им нужно только правильно получать ссылки куда отправлять.
...
Рейтинг: 0 / 0
23.06.2012, 15:25:20
    #37851472
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Java
BlazkowiczРазмер оперативки не особо должен влиять вообще. Ведь ОС должна использовать и виртуальную память.
Java сегментирует память. Есть системная для JVM, есть куча, есть пермген, есть память под потоки. Всё это память одного процесса. А OOME падает при нехватки памяти даже в одном из сегметов. Памяти может быть много, но она уже зарезервирована другими сегментами.
Т.е вы хотите сказать что ОЗУ чем-то занято? И по этому теперь при наличии 2Gb памяти стали возникать проблемы? Дело в том, что все это дело запущено на VPS XEN.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с Java / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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