ActiveMQ OutOfMemory Не может создать больше потоков

StackOverflow https://stackoverflow.com/questions/1808782

  •  05-07-2019
  •  | 
  •  

Вопрос

Я имитирую перегрузку сервера и получаю эту ошибку:

java.lang.OutOfMemoryError: unable to create new native thread

Я прочитал на этой странице http://activemq.apache.org/javalangoutofmemory.html, что я могу увеличить объем памяти.Но как мне это сделать?Какой файл мне нужно изменить?Я попытался передать аргументы с помощью скрипта bin / activemq, но безуспешно.

Это было полезно?

Решение

Ваш случай соответствует огромное количество потоков.Есть 3 способа решить эту проблему:

  • уменьшите количество потоков (т. е., -Dorg.apache.activemq.Использовал dedicatedtaskrunner=false в документе)
  • уменьшите размер стека для каждого потока на -Xss опция (значения по умолчанию:320 КБ для 32-разрядной Java в Win / Linux, 1024 КБ для 64-разрядной Java в Win / Linux, см. док)
  • уменьшить (не расширять) размер кучи -Xmx возможность освободить место для стеков для каждого потока (по умолчанию в скрипте ActiveMQ 512 мбайт)

Примечание:Если стек или куча слишком малы, это должно привести к другому Ошибка OutOfMemoryError.

Вы можете указать их с помощью ACTIVEMQ_OPTS переменная оболочки (в UNIX).Например, запустите ActiveMQ как

ACTIVEMQ_OPTS=-Xss160k bin/activemq

Другие советы

Проверьте здесь

Укажите аргумент -Xmx для виртуальной машины, на которой работает ActiveMQ - например, Tomcat.

Вы можете назначить виртуальной машине Java больше памяти, используя аргумент команды -Xmx .
Например. java -Xmx512M MyClass

Мы столкнулись с этой проблемой в системе Linux (RedHat Enterprise 5) и обнаружили, что в этой сборке ulimit nprocs в /etc/security/limits.conf фактически контролирует количество потоков в пользователь может порождать

Вы можете просмотреть это ограничение с помощью команды ulimit -a .

Из коробки было установлено мягкое ограничение в 100 и жесткое ограничение в 150, что крайне не хватает количества потоков, необходимых для запуска современного сервера приложений.
Мы полностью удалили этот лимит, и он решил эту проблему для нас.

Это не похоже на то, что вам не хватает места в куче, поэтому не увеличивайте его (опция -Xmx). Вместо этого вашему приложению не хватает памяти процесса, и уменьшение пространства кучи освободит память процесса для собственного использования. Вопрос в том, почему вы используете столько памяти процесса? Если вы не используете JNI, вы, вероятно, создали слишком много потоков, и пост Хабе объяснил, как это исправить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top