Назад | Перейти на главную страницу

Проблема Java VM в OpenVZ

Я купил vps для размещения моих потребностей Java. Но я не могу запустить на нем java. Все, что связано с java, установлено правильно, но когда я пытаюсь запустить java (например, "java -version"), я получаю эту ошибку:

Ошибка при инициализации ВМ
Не удалось зарезервировать достаточно места для кучи объектов
Не удалось создать виртуальную машину Java.

Я не думаю, что это проблема, связанная с Java, наверняка не хватает памяти. Я связался с админом vps, но он говорит, что все в порядке, у вас 2 ГБ оперативной памяти, с возможностью расширения до 4 ГБ! Я немного поискал по этой теме, вот мой файл BEANS (числа, преобразованные в удобную для человека форму с помощью скрипта). Кстати, подсчитываются ли выделенные памяти кучи JVM на kmemsize или privvmpages? Сколько оперативной памяти позволяет мне выделить в этой конфигурации с помощью jvm для одного процесса?

resource                     held              maxheld              barrier                limit              failcnt
kmemsize                  2.25 mb              2.35 mb             13.71 mb             14.10 mb                    0
lockedpages                     0                    0           1024.00 kb           1024.00 kb                    0
privvmpages              20.54 mb             21.33 mb            256.00 mb            272.00 mb                  156
shmpages                  5.00 mb              5.00 mb             84.00 mb             84.00 mb                    0
numproc                        13                   14                  240                  240                    0
physpages                 9.36 mb              9.45 mb                    0            MAX_ULONG                    0
vmguarpages                     0                    0            132.00 mb            MAX_ULONG                    0
oomguarpages              9.36 mb              9.45 mb            MAX_ULONG            MAX_ULONG                    0
numtcpsock                      3                    3                  360                  360                    0
numflock                        3                    3                  188                  206                    0
numpty                          2                    2                   16                   16                    0
numsiginfo                      0                    1                  256                  256                    0
tcpsndbuf                69.17 kb             69.17 kb              1.64 mb              2.58 mb                    0
tcprcvbuf                48.00 kb             48.00 kb              1.64 mb              2.58 mb                    0
othersockbuf              6.80 kb              6.80 kb              1.07 mb              2.00 mb                    0
dgramrcvbuf               0.00 kb              0.00 kb            256.00 kb            256.00 kb                    0
numothersock                    9                   10                  360                  360                    0
dcachesize                0.00 kb              0.00 kb              3.25 mb              3.46 mb                    0
numfile                       704                  746                 9312                 9312                    0
numiptent                      10                   10                  128                  128                    0

Заранее спасибо!

Дважды проверьте, правильно ли ваш скрипт перевел необработанные счетчики компонентов. в соответствии с этим у вас есть только 256 мегабайт оперативной памяти, а не 4 гигабайта, как говорит вам ваш администратор.

сконцентрируйтесь только на 2 зернах:

  • Privvmpages - максимальный объем памяти, который ваш контейнер может выделить (зарезервировать)
  • oomguarpages - гарантированный объем памяти, который фактически будет использовать ваш контейнер. В случае нехватки памяти на хосте все, что превышает это количество, вероятно, будет убито.

Java печально известна тем, что выделяет большие объемы памяти, а затем никогда их не использует, рассчитывая на то, что ОС чрезмерно усердствовать. По моему опыту, для надежной работы JVM вам понадобится хотя бы гигабайт Privvmpages, хотя будет использоваться всего пара десятков мегабайт.

После пары месяцев экспериментов и попыток сохранить privvmpages в виртуальных средах, работающих под управлением Java, я лично сдался, я просто установил барьер на максимум, настроил oomguarpages соответствующим образом и надеюсь на лучшее;)

Ты должен попытаться JRockit VM он отлично работает на моем OpenVZ VPS, он потребляет меньше памяти, чем Sun / Oracle jvm.

У меня была аналогичная проблема, когда я работал на VPSLink, Sun / Oracle JVM просто не работает с OpenVZ (вы можете поискать старые темы на форумах VPSLink, чтобы получить дополнительную информацию).

В конце концов, единственное, что у меня сработало с контейнером OpenVZ, - это IBM JDK, который вы можете получить на https://www.ibm.com/developerworks/java/jdk/linux/download.html

Однако я думаю, что лучшим решением будет переход на выделенный сервер, где вы можете установить нужный JDK и получить гораздо меньше головной боли, чем с OpenVZ.