powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / С чем едят JAVA_OPTS ?
36 сообщений из 36, показаны все 2 страниц
С чем едят JAVA_OPTS ?
    #38236646
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставили новый сервер. CentOS 6.3. Больше 100 ядер. Но одна злостная программулина, если задаёшь ей более 4 ядер, сваливается с ошибкой:
A fatal error has been detected by the Java Runtime Environment:
java.lang.OutOfMemoryError: Cannot create GC thread. Out of system resources.
Internal Error (gcTaskThread.cpp:38), pid=122484, tid=140387071719168
Error: Cannot create GC thread. Out of system resources.
JRE version: 6.0_21-b06
Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64)


Полистал интернеты, нашёл, что надо играться с JAVA_OPTS, но не могу найти правил игры, к тому же в javой ни разу не игрался.

1. Где прописывать параметры?
Есть какой-то специальный конфигурационный файл java или можно прямо в .cshrc ?

2. Где найти описания всех ключей?
Или хотя бы какие ключи тут подойдут?
Нашёл описание параметра XmsIm, где говорится о размере кучи. Чё ещё за куча? И как вычислить I ? Только экспериментальным путём?










__________________________________________________________________
Учиться на ошибках, особенно чужих, значит сделать свою жизнь скучной.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236705
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JAVA_OPTS это переменная которую обычно используют при запуске скрипты серверов приложений. Тут всё зависит от того как именно вы свою программу запускаете.
По поводу ошибки, надо гуглить gcTaskThread.cpp:38. Больше похоже на багу JVM.
Ну, и можно попробовать поменять тип GC.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236735
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуглил и gcTaskThread.cpp:38 гуглил, и Garbage Collection. В итоге, там тоже все пытаются менять параметры Xms и Xmx.

А кроме GC какие ещё бывают?
И как это скажется на приложении?
Или приложение вообще не понимает с чем имеет дело?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236753
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в сервере приложений (я думаю, что это он) нашёл лишь одну строчку со словом JAVA:
export SM_XMX=4096m

А как вообще посмотреть сейчасные данные по JAVA_OPTS ?
echo, естественно, говорит, что такой переменной вообще нет.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236880
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кoличество GC thread'ов зависит от реализации на конкретной платформе. На Win, как я помню, равно количеству ядер.
1 ядро - 1 GC thread
4 ядра - 4 GC thread'а
100 ядер - 100 GC thread'ов (никогда не видел 100 ядер)
Может вашему новому серверу тяжко создать 100 thread'ов на выделенной памяти.
Можно либо памяти процессу дать побольше, либо уменьшить количество GC thread'ов
-XX:ParallelGCThreads=1 (или -XX:ConcGCThreads=1 - черт его знает, какой там default'овый на CentOS).
Один GC thread ваш сервер уж должен осилить..
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236901
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thКстати, в сервере приложений (я думаю, что это он) нашёл лишь одну строчку со словом JAVA:
export SM_XMX=4096m
А как вообще посмотреть сейчасные данные по JAVA_OPTS ?
echo, естественно, говорит, что такой переменной вообще нет.
Какой сервер приложения и как вы его запускаете?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38236909
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParallelGCThreads или ConcGCThreads - этo и есть ключи
Их мoжно указать прямо в командной строке, если запускаешь java напрямую (а не через какой-нибудь командный файл).
А если запускаешь java именно через какой-нибудь командный файл (например Tomcat), то, чтобы передать ключи в java, есть два пути:
1. Поменять командный файл, что коряво.
2. Передать ключи в командный файл, а уж он их передаст в java. Сработает, если командный файл достаточно умный. Вот в Tomcat'e для этого надо задать в переменной JAVA_OPTS желаемые ключи перед вызовом командного файла.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38237022
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там 8 процессоров по 10 ядер по 2 потока.
До 4 ядер ошибки нет.

Некое никому неизвестное приложение SeisSpace.
У него есть сервер - некий sitemanager.
В нём много чего оказалось от java:
# SM_XMX (Maximum Java Heap Size)
# The default value for the SiteManager is 1024m but
# can be modified with the export below.
export SM_XMX=16000m
было 4096m

LGC_JAVA_XMX=4096m
было 1024m

JAVAFLAGS="$JAVAFLAGS -Xmx${LGC_JAVA_XMX} -Dcom.lgc.prowess.java.maxheap=512m"
было 64m

Теперь ошибка другая:
0: Error occurred during initialization of VM
0: Cannot create VM thread. Out of system resources.
S: Current job state = Initializing however we have a bad exit code, setting job state to failed
S: Phase updated - Failed
No final report available

Видимо я зря ВСЕ параметры увеличил. Я так понимаю, что что-то надо увеличивать - какой-то общий параметр, а что-то надо уменьшать - какие-то частные параметры, относящиеся к каждому потоку отдельно.

JAVA_OPTS включал в различные файлы - не захватываются.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38237047
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J.Serge
А как бы доковыряться до того места, где лежат параметры ParallelGCThreads или ConcGCThreads ?
Во-первых, чтобы узнать чему нынешний параметр равен?
Во-вторых, чтобы поменять его.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38237281
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eсли "До 4 ядер ошибки нет" - ну и запускай на 4. Или надо именно на всех?
JAVA_OPTS у тебя называется JAVAFLAGS.

Сделай так:
JAVAFLAGS="$JAVAFLAGS -XX:+UseSerialGC -Xmx${LGC_JAVA_XMX} -Dcom.lgc.prowess.java.maxheap=64m"
Будет использоваться serialGC без кучи thread'ов.

Почитай про GC и настраивай, как тебе надо.
Посмотреть текущие значения можно через JConsole
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38237471
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27th,

попробуйте методом тыка на скольких ядрах оно еще заустится
у ос есть ограничение на максимальное кол-во процессов-потоков, проверьте правильно ли там все выставлено
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238028
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом тыка давно всё испробовано.
Запускается только на 4 ядрах.
Если на 5, то иногда пишет, что не может создать GCThread, иногда, что не может создать VMThread.
Если на 6 и больше, то всегда пишет, что не может создать GCThread.

При запущенной JConsole вообще только на 2 ядрах задания в программе запускаются, а более - вылетает, то есть JConsole отъедает ещё часть ресурсов.
ХОТЯ
JConsole и программа пользуются разными javaми.
JConsole - системной Java HotSpot 64-Bit Server VM version 11.2-b-01
а программа - своей Java HotSpot 64-Bit Server VM version 17.0-b16

Не нашёл где в JConsole увидеть значения по умолчанию. Параметров много, но все они без значений, выглядит это примерно так:


По графикам видно, что для новые Threadы создаются и для них есть место. При создании новых Threadы - пик ещё поднимается, то есть как бы лимит не превышен.


-XX:+UseSerialGC не помогло
увеличение kernel.core_pipe_limit не помогло

Сижу читаю про GC, смотрю в JConsole.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238031
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картинки ещё раз:


...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238038
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thМетодом тыка давно всё испробовано.
Запускается только на 4 ядрах.
Если на 5, то иногда пишет, что не может создать GCThread, иногда, что не может создать VMThread.
Если на 6 и больше, то всегда пишет, что не может создать GCThread.

При запущенной JConsole вообще только на 2 ядрах задания в программе запускаются, а более - вылетает, то есть JConsole отъедает ещё часть ресурсов.

Похоже проблема не совсем в Java. Где-то такие процессу установлен лимит в 4 ядра. Java запускается. Оппа - 5е ядро. Сейчас-ка я его заюзаю. А ОС говорит что ядро доступно, а при попытке использования - дули крутит.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238052
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Именно поэтому и увеличивал kernel.core_pipe_limit с 4 сначала до 8, потом до 12, но ничего вообще не изменилось.

Кстати, после просмотра графиков подумал, что ядра и threadы связаны совсем не линейно, то есть при задании 8 ядер - это не означает, что создадутся 8 новых threadов, видимо не так я понимал их суть.

И ещё меня удивило, что сервер приложений и само приложение запускают каждый свою JVM.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238066
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27th Blazkowicz
Именно поэтому и увеличивал kernel.core_pipe_limit с 4 сначала до 8, потом до 12, но ничего вообще не изменилось.

А если 0?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238373
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С 0 тоже самое.
С -XX:ParallelGCThreads=разные цыфры тоже самое.

В общем, думаю я, что это всё-таки системное.

Пользователи сказали, что на старом сервере они запускали и с 8 и с 16 нодами. А там программу я ставил также один в один как и здесь.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238380
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thС 0 тоже самое.
С -XX:ParallelGCThreads=разные цыфры тоже самое.

В общем, думаю я, что это всё-таки системное.

Пользователи сказали, что на старом сервере они запускали и с 8 и с 16 нодами. А там программу я ставил также один в один как и здесь.
Зовите админа. Пусть смотрит, вдруг ещё какие ограничение есть на процесс или на юзера.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238523
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вся грусть в том, что я и есть админ. Просто с java ни разу глубоко не работал. Системы ставились до меня, но менять любые параметры могу сколько угодно.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238530
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27th,

ulimit -a что показывает?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238531
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А /proc/{pid}/limits ?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238668
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ulimit я тоже смотрел, но единственное, что мне не понравилось - это
max user processes (-u) 1024
Надо будет увеличить для пользователей, но для этого нужна перезагрузка, а сейчас пока никак, и в любом случае не думаю, что дело в этом, ибо все другие программы работают нормально.

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8271882
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Все остальные параметры примерно как на старых серверах.

Пока не могу посмотреть /proc/pid/limits, ибо пользователи забрали единственную лицензию для работы на другом сервере. Так что завтра утром продолжу эксперименты.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38238851
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27th,

нy а обычные java-програмки запускаются на том самом JDK, на котором крутится приложение, на 100 ядрах?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38239555
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так нету других java-программ.

/proc/89655/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 10485760 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 8271882 processes
Max open files 4096 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 8271882 8271882 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

Но самое главное, что видимо никакие ухищрения менять параметры в конфиг-файлах не подхватывались. Я нашёл настройки в самой программе, поменял их и всё заработало.
ВРОДЕ БЫ.


Теперь надо изучать java и GC, все параметры, чёкуда, чёкак, а то может быть Serial медленней, чем Parallel (не зря же разработчики по умолчанию поставили такое значение?) или ещё какая-нибудь гадость позже вылезит.

Но жрёт оно, конечно, нефигово:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
92587 prouser 30 10 6331m 1.0g 23m S 99.6 0.1 15:17.07 ssexec
92589 prouser 30 10 6331m 933m 23m S 103.9 0.1 15:17.17 ssexec
92581 prouser 30 10 6332m 926m 23m S 99.6 0.1 15:16.52 ssexec
92590 prouser 30 10 6676m 893m 24m S 6.1 0.1 0:18.44 ssexec
92585 prouser 30 10 6331m 878m 23m S 99.6 0.1 15:16.40 ssexec
92588 prouser 30 10 6332m 874m 23m S 105.8 0.1 15:16.16 ssexec
92586 prouser 30 10 6397m 874m 23m S 99.6 0.1 15:15.63 ssexec
92584 prouser 30 10 6331m 874m 23m S 99.6 0.1 15:15.80 ssexec
92583 prouser 30 10 6332m 870m 23m S 100.0 0.1 15:16.73 ssexec
92582 prouser 30 10 6332m 867m 23m S 100.0 0.1 15:16.53 ssexec
89655 prouser 20 0 13.6g 867m 24m S 0.3 0.1 1:40.21 java
89311 prouser 20 0 25.3g 563m 16m S 0.3 0.1 0:12.93 java
92415 prouser 20 0 40.6g 123m 17m S 0.0 0.0 0:03.63 java
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38239559
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thТеперь надо изучать java и GC, все параметры, чёкуда, чёкак, а то может быть Serial медленней, чем Parallel [i](не зря же разработчики по умолчанию поставили такое значение?)
Serial должен быть быстрее, в целом, но от приводит к долгим stop-the-world паузам при сборке. Если система просто процессит какие-то данные и важно время достижения конкретной цели, то ок. А если это сервер обслуживающий множество юзеров, то Serial не подходит. Так как JVM может остановить все потоки и пол минуты собирать мусор. Юзеры всё это время будут ждать ответа от сервера.
https://blogs.oracle.com/jonthecollector/entry/our_collectors
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38239624
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSerial должен быть быстрее, в целом, но от приводит к долгим stop-the-world паузам при сборке. Если система просто процессит какие-то данные и важно время достижения конкретной цели, то ок. А если это сервер обслуживающий множество юзеров, то Serial не подходит. Так как JVM может остановить все потоки и пол минуты собирать мусор. Юзеры всё это время будут ждать ответа от сервера.

Если говорится о java-приложениях, то оно у нас одно и лицензия на него одна. А так-то на сервере десяток пользователей работает в других программах и скорость важна, ибо они запускают задачи, которые обрабатываются по несколько дней, поэтому и был куплен более мощный сервер, чтобы ускорить процесс обработки.

В общем-то, нашёл информацию, что Serial использует один поток для выполнения всех работ по сборке мусора. Лучше всего подходит для однопроцессорных машин, иногда может быть полезен и для многопроцессорных, на которых запускаются приложения с небольшими наборами данных (примерно до 100 МБ), чего недостаточно для функционирования больших, громоздких приложений.

Думаю, что надо возвращаться к Parallel, но играть с другими параметрами.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38239669
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thЕсли говорится о java-приложениях, то оно у нас одно и лицензия на него одна. А так-то на сервере десяток пользователей работает в других программах и скорость важна, ибо они запускают задачи, которые обрабатываются по несколько дней, поэтому и был куплен более мощный сервер, чтобы ускорить процесс обработки.
Если задачи долгоиграющие и их нужно закончить как можно раньше, то serial, должен быть все же лучше
http://stackoverflow.com/questions/9738911/javas-serial-garbage-collector-performing-far-better-than-other-garbage-collect


Im27thВ общем-то, нашёл информацию, что [i]Serial использует один поток для выполнения всех работ по сборке мусора. Лучше всего подходит для однопроцессорных машин, иногда может быть полезен и для многопроцессорных, на которых запускаются приложения с небольшими наборами данных (примерно до 100 МБ), чего недостаточно для функционирования больших, громоздких приложений.
Я даже знаю где это написано
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Но стоит учесть, что это "в общем случае". А "общий случай" это многопоточный web сервер расчитаный на сотни юзеров.


Im27thДумаю, что надо возвращаться к Parallel, но играть с другими параметрами.
Если у вас 4 доступных ядра, при этот крутится десяток долгоиграющих задач, то Parallel, по-моему ни к какому приросту производительнсоти не приведёт. Так как GC будет регулярно конкурировать с работающими задачами.
Кстати, есть ключи, чтобы на GC выделить отдельные ядра. Тогда они не будет конкурировать с рабочими потоками.
Вот это стоит почитать
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

Для пущей производительности системы в целом, надо смотреть GC лог и оптмизировать исходя из полученых данных. Например размеры поколеней могут хорошо помочь, если их перенастроить на нужды приложения.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38240210
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im27thНo самое главное, что видимо никакие ухищрения менять параметры в конфиг-файлах не подхватывались. Я нашёл настройки в самой программе, поменял их и всё заработало.
ВРОДЕ БЫ.



Hу вот, а говоришь
Im27th-XX:+UseSerialGC не помогло


Самое то :)
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38241276
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J.SergeСамое то

Спасибо!
НО
Помогло, но ненадолго.
Теперь пользователи захотели запускать задачи на 30 и на 50 ядрах. Чует моё сердце, что так и до всех 160 дойдёт.

Ладно, 30 или 50 я ещё допускаю, поэтому начал проводить испытания и оказалось, что до 22 ядер всё работает с UseSerialGC прекрасно, но после 22 начинает вылетать теперь уже с другими ошибками:
WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=1720] throws
java.lang.OutOfMemoryError: unable to create new native thread

Про ServerSocket нашёл, что надо либо в hosts надо прописать имя машины - оно, конечно же, там с самого начала прописано, либо добавить
-Dcom.sun.management.jmxremote.local.only=false
Добавил.
Не помогло.

А unable to create скорее всего следствие кривого ServerSocket.

Иногда ещё другие ошибки вылетают, но они какие-то безсистемные и одноразовые.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38241354
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было в начале:
Im27thПоставили новый сервер. CentOS 6.3. Больше 100 ядер. Но одна злостная программулина, если задаёшь ей более 4 ядер, сваливается с ошибкой:
A fatal error has been detected by the Java Runtime Environment:
java.lang.OutOfMemoryError: Cannot create GC thread. Out of system resources.

Internal Error (gcTaskThread.cpp:38), pid=122484, tid=140387071719168
Error: Cannot create GC thread. Out of system resources.
JRE version: 6.0_21-b06
Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64)
...


Сейчас:
Im27th
...до 22 ядер всё работает с UseSerialGC прекрасно, но после 22 начинает вылетать теперь уже с другими ошибками:
WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=1720] throws
java.lang.OutOfMemoryError: unable to create new native thread

Про ServerSocket нашёл, что надо либо в hosts надо прописать имя машины - оно, конечно же, там с самого начала прописано, либо добавить
-Dcom.sun.management.jmxremote.local.only=false
Добавил.
Не помогло.
...


Больше ядер - больше thread'ов. Каждому нужны ресурсы - в первую очередь память.
Надо пробовать увеличивать память выделенную для JVM (+Xmx/+Xms).
Есть еще ключ +Xss - размер стека thread'а. Можно попробовать его уменьшить.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38241791
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J.SergeБольше ядер - больше thread'ов. Каждому нужны ресурсы - в первую очередь память.

Это я понимаю. Поэтому играюсь уже который день с этими параметрами.

J.SergeНадо пробовать увеличивать память выделенную для JVM (+Xmx/+Xms).
Есть еще ключ +Xss - размер стека thread'а. Можно попробовать его уменьшить.

Уменьшить Xss - это я попробую,
НО
меня смущает 0.0.0.0/0.0.0.0.
Почему стало именно в эту ошибку вываливаться?
Моя первая догадка была, что оно через loopback запускает потоки, а в сетевом интерфейсе какие-то ограничения на количество, поэтому после определённого числа он уже не может выдавать ресурсы и вываливается в 0.0.0.0/0.0.0.0, соответственно ничего после этого не создаётся. Но подтверждения своей догадки в интернетах не нашёл.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38241802
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0.0.0.0 никак не связан с самой ошибкой. RMI TCP сервер видать там активно создаёт потоки.
И в какой-то момент оно падает, всё потой же причине. Системное ограничение на количество процессов:
http://devgrok.blogspot.com/2012/03/resolving-outofmemoryerror-unable-to.html
RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=1720] - это говорит только о том кто именно пытался создать поток и не смог. Но к самой ошибке отношения не имеет.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38461543
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
В общем-то, перелопатив кучу параметров, вроде бы всё заработало.

НО

Теперь при запуске некоторых заданий, всё начинает жутко тормозить.

Вся память забита:
_________________________________________________________________
Код: plaintext
1.
2.
3.
4.
>free
             total       used       free     shared    buffers     cached
Mem:    1058652692 1029495024   29157668          0     266828  772509584
-/+ buffers/cache:  256718612  801934080
Swap:    292420600       5392  292415208
_________________________________________________________________

CPU работает даже круче чем 146%:
_________________________________________________________________
Код: plaintext
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.
>top

top - 11:26:20 up 3 days, 17:50,  3 users,  load average: 68.45, 67.76, 87.51
Tasks: 4115 total,  50 running, 4065 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us, 58.3%sy,  8.0%ni, 33.5%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  1058652692k total, 1029500700k used, 29151992k free,   266828k buffers
Swap: 292420600k total,     5392k used, 292415208k free, 772508480k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                      
 21575 prouser   30  10 27.4g 2.7g  61m S 226.7  0.3   1100:19 ssexec                                                                                      
 21561 prouser   30  10 27.0g 1.9g  65m S 181.6  0.2   2747:04 ssexec                                                                                      
 21543 prouser   30  10 27.0g 1.9g  57m S 159.8  0.2   2725:31 ssexec                                                                                      
 21564 prouser   30  10 27.0g 1.9g  60m S 184.1  0.2   2740:51 ssexec                                                                                      
 21546 prouser   30  10 27.0g 1.9g  54m S 164.7  0.2   2679:33 ssexec                                                                                      
 21540 prouser   30  10 27.0g 1.9g  55m S 184.4  0.2   2689:39 ssexec                                                                                      
 21552 prouser   30  10 27.0g 1.9g  54m S 182.2  0.2   2680:43 ssexec                                                                                      
 21562 prouser   30  10 27.2g 1.9g  54m S 172.8  0.2   2654:32 ssexec                                                                                      
 21551 prouser   30  10 27.0g 1.9g  54m S 158.8  0.2   2761:32 ssexec                                                                                      
 21553 prouser   30  10 27.0g 1.9g  54m S 167.9  0.2   2684:19 ssexec                                                                                      
 21558 prouser   30  10 27.0g 1.9g  54m S 174.4  0.2   2706:38 ssexec                                                                                      
 21539 prouser   30  10 27.0g 1.9g  55m S 180.3  0.2   2689:38 ssexec                                                                                      
 21574 prouser   30  10 27.0g 1.9g  54m S 185.9  0.2   2660:47 ssexec                                                                                      
 21536 prouser   30  10 27.0g 1.9g  50m S 182.2  0.2   2690:42 ssexec                                                                                      
 21563 prouser   30  10 27.0g 1.8g  55m S 168.2  0.2   2676:29 ssexec                                                                                      
 21537 prouser   30  10 27.0g 1.8g  52m S 179.7  0.2   2679:33 ssexec                                                                                      
 21555 prouser   30  10 27.1g 1.8g  54m S 151.7  0.2   2680:48 ssexec                                                                                      
 21541 prouser   30  10 27.0g 1.8g  53m S 177.8  0.2   2680:42 ssexec                                                                                      
 21566 prouser   30  10 27.0g 1.8g  56m S 184.4  0.2   2688:12 ssexec                                                                                      
 21545 prouser   30  10 27.0g 1.8g  53m S 169.7  0.2   2667:24 ssexec                                                                                      
 21547 prouser   30  10 27.0g 1.8g  53m S 176.0  0.2   2684:58 ssexec                                                                                      
 21538 prouser   30  10 27.0g 1.8g  51m S 183.7  0.2   2657:41 ssexec                                                                                      
 21542 prouser   30  10 27.0g 1.8g  53m S 163.8  0.2   2688:28 ssexec                                                                                      
 21544 prouser   30  10 27.0g 1.8g  53m S 178.4  0.2   2674:42 ssexec                                                                                      
 21548 prouser   30  10 27.0g 1.7g  55m S 186.2  0.2   2682:37 ssexec                                                                                      
 21556 prouser   30  10 27.0g 1.7g  54m S 185.3  0.2   2665:24 ssexec                                                                                      
 21559 prouser   30  10 27.0g 1.7g  57m S 161.3  0.2   2694:59 ssexec                                                                                      
 21572 prouser   30  10 27.0g 1.7g  54m S 182.8  0.2   2681:42 ssexec                                                                                      
 21567 prouser   30  10 27.0g 1.7g  56m S 168.8  0.2   2688:44 ssexec                                                                                      
 21550 prouser   30  10 27.0g 1.6g  54m S 154.5  0.2   2690:42 ssexec                                                                                      
 21549 prouser   30  10 27.0g 1.6g  55m S 165.7  0.2   2693:28 ssexec                                                                                      
 21565 prouser   30  10 27.0g 1.6g  53m S 181.9  0.2   2671:40 ssexec                                                                                      
 21554 prouser   30  10 27.0g 1.6g  54m S 153.8  0.2   2675:23 ssexec                                                                                      
 21560 prouser   30  10 27.0g 1.6g  54m S 171.3  0.2   2685:43 ssexec
___________________________________________________________________

Но при этом, если запустить jvisualvm, то там всё довольно уныло:



То есть все ресурсы забиты огромным количеством потоков, но в самих потоках нет бурления жизни?
(Количество потоков задают пользователи вручную. Так как нет адекватного описания внутренней работы программного комплекса, то мы пришли к выводу, что чем больше потоков, тем быстрее происходит счёт задания.)

Или я смотрю не туда?
Или смотрю туда, но не понимаю что так и должно быть?
Или, действительно, надо какие-то параметры поправить?
Xmx или ещё чего?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38462906
olexande
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пробовали "одно и то же задание" запускать с разным кол-вом потоков?
Может дедлоки?
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38462907
olexande
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"отсутствие бурления" - на них похоже по симптомам.
...
Рейтинг: 0 / 0
С чем едят JAVA_OPTS ?
    #38463261
init01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olexandeНе пробовали "одно и то же задание" запускать с разным кол-вом потоков?

Да именно это первое в голову и приходит, но пользователи такие ПОЛЬЗОВАТЕЛИ, они ж умнее и занятее всех, к тому же у их одна лицензия, а им работать надо, поэтому пока приходится сторонне наблюдать и делать теоретические выводы.

Да, когда только поставил программу, было немного времени испытать этот вариант, но я взял маленький проект и, естественно, на 30 потоках он отработал быстрее, чем на 10.
Но тогда я ещё не знал ни про jconsole, ни про jvisualvm, так что графиков не видел.

olexandeМожет дедлоки?
Да вряд ли. 80 ядер с хипертрейдингом - это до 160 потоков. Столько мы им не разрешаем запускать. Ну 50, ну 100, ну совесть-то тоже надо иметь.

Правда сегодня утром отключили хипертрейдинг проверить версию, что java как-то с хипертрейдингом плохо дружит и из-за этого идёт какая-нибудь утечка памяти или ещё чего-то.

В любом случае на графике и Perm, и Old, и Eden почти пустые.
Я это вижу так:
Eden+Perm+Old+S0+S1 = примерно гигов 20 (top почему-то считает, что 27)
40-50 потоков и весь терабайт оперативки забит.
При этом используется всего-то:
Eden 160Mb + Old 315Mb + Perm 21 = даже меньше гигабайта в каждом потоке.
То есть, если уменьшить какие-то параметры вдвое-втрое, то серверу станет легче дышать.

Или я неправильно рассуждаю?
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / С чем едят JAVA_OPTS ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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