Проблемы с памятью в Tomcat на Solaris 10

У меня есть сервер под управлением Solaris 10. Он сообщает о 70+ ГиБ свободной оперативной памяти. Я пытаюсь запустить Tomcat 7.0.68, используя Java 1.7.0_80 в 64-битном режиме.

Сервер утверждает, что не может выделить 717 МБ ОЗУ. При каждой попытке я получаю файл hs_err_pidxxx.log. Это предполагает следующее:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 717225984 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space

Нет. Доступно 70 ГиБ, он пытается выделить 700 МиБ.

#   In 32 bit mode, the process size limit was hit

Мы находимся в 64-битном режиме.

# Possible solutions:
#   Reduce memory load on the system

На этой машине нет ничего, кроме ОС.

#   Increase physical memory or swap space

У нас уже есть на два порядка больше. чем необходимо.

#   Check if swap backing store is full

Нет.

#   Use 64 bit Java on a 64 bit OS

Готово.

#   Decrease Java heap size (-Xmx/-Xms)

Сделал бы, если бы мог.

#   Decrease number of Java threads

Как это сделать?

#   Decrease Java thread stack sizes (-Xss)

Предлагаемые значения? Это значение по умолчанию, но я не знаю, как его настроить.

#   Set larger code cache with -XX:ReservedCodeCacheSize=

Опять же, мы по умолчанию.


$ swap -s
total: 48607296k bytes allocated + 18201336k reserved = 66808632k used, 311770552k available
1
задан 3 May 2016 в 18:06
1 ответ

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

Вы будете знать использование виртуальной памяти с помощью этой команды:

swap -s

Простой ответ на нехватку виртуальной памяти просто увеличить (или создать) область подкачки для резервирования памяти, чтобы иметь подкрепление области хранения.

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

Помимо остановки других процессов, использующих виртуальную память, вы ничего не можете сделать из этой зоны, даже в качестве корня. Вам нужно попросить администратора глобальной зоны предоставить больше виртуальной памяти для вашей зоны , в вашем случае настройка zone.max-swap.

.
1
ответ дан 3 December 2019 в 23:47

Теги

Похожие вопросы