powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / С чем едят JAVA_OPTS ?
25 сообщений из 36, страница 1 из 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
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / С чем едят JAVA_OPTS ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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