Java ActiveMQ OutOfMemory可以';不要创建更多线程

Java ActiveMQ OutOfMemory可以';不要创建更多线程,java,activemq,Java,Activemq,我正在模拟服务器过载,并得到以下错误: java.lang.OutOfMemoryError: unable to create new native thread 我在这一页上读到,我可以增加内存大小。但是我该怎么做呢?我需要修改哪个文件,?我试图通过bin/activemq脚本传递参数,但没有成功。您可以使用-Xmx命令参数为Java虚拟机分配更多内存。 例如,java-Xmx512M MyClass 例如,为运行ActiveMQ-Tomcat的VM指定-Xmx参数。您的案例对应于。 有三

我正在模拟服务器过载,并得到以下错误:

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

我在这一页上读到,我可以增加内存大小。但是我该怎么做呢?我需要修改哪个文件,?我试图通过bin/activemq脚本传递参数,但没有成功。

您可以使用-Xmx命令参数为Java虚拟机分配更多内存。
例如,
java-Xmx512M MyClass

例如,为运行ActiveMQ-Tomcat的VM指定
-Xmx
参数。

您的案例对应于。 有三种解决方法:

  • 减少线程数量(即文档中的-Dorg.apache.activemq.useIdecatedtaskrunner=false
  • 通过-Xss选项减少每线程堆栈大小(默认值:Win/Linux上32位Java为320 KiB,Win/Linux上64位Java为1024 KiB,请参阅)
  • 减少(而不是扩展)堆大小-Xmx选项,为每个线程堆栈留出空间(ActiveMQ脚本中默认为512 MiB)
注意:若堆栈或堆太小,则必须导致另一个OutOfMemoryError

可以使用ACTIVEMQ\u OPTSshell变量(在UNIX中)指定它们。 例如,将ActiveMQ作为

ACTIVEMQ_OPTS=-Xss160k bin/activemq

这看起来不像堆空间用完了,所以不要增加堆空间(使用-Xmx选项)。相反,您的应用程序正在耗尽进程内存,减少堆空间将释放进程内存供本机使用。问题是,为什么要使用这么多进程内存?如果你不使用JNI,你可能创建了太多的线程,habe的帖子解释了如何解决这个问题。

我们在Linux(RedHat Enterprise 5)系统上遇到了这个问题,发现在这个构建中,
/etc/security/limits.conf
中的nprocs ulimit实际上控制着用户可以生成的线程数量

您可以使用
ulimit-a
命令查看此限制

开箱即用的设置为100个软限制和150个硬限制,这与运行现代应用程序服务器所需的线程数量相比少得可怜。

我们完全取消了这个限制,它为我们解决了这个问题。

我如何使用activemq做到这一点?我在cli中运行,即bin/activemq,我没有在集装箱上运行activemq。我在链接上检查了,但我不明白。