OutOfMemoryError:无法创建新的本机线程AWS

时间:2015-06-05 00:56:49

标签: hibernate grails amazon-web-services amazon-ec2 out-of-memory

My Grails应用程序部署在AWS EC2实例中的Tomcat 6中。我遇到的问题是它无法启动并继续收到错误:OutOfMemoryError:无法创建新的本机线程。当我运行VisualVM时,似乎创建了大量线程,大约1,000+。我对使用这个工具并不熟悉,似乎无法确定我的代码的哪个部分创建了这么多线程。我注意到的一件事是,当我禁用休眠二级缓存或将net.sf.ehcache.hibernate.EhCacheProvider更改为net.sf.ehcache.hibernate.SingletonEhCacheProvider时,线程数明显减少。是否有一个工具可以基本上帮助我确定我的代码在哪里导致线程创建的大量增加?

2 个答案:

答案 0 :(得分:0)

yourkit java profiler在显示堆栈方面做得不错。 NewRelic也是如此。有一些维护不善的东西,如Grails Profiler plugin

答案 1 :(得分:0)

您需要增加内存设置。进入tomcat的bin/setclasspath.sh并将以下行追加到末尾:

export CATALINA_OPTS="-Xmx1024m  -XX:MaxPermSize=512m"

我将它用于一个非常大的应用程序,因此您可以将内存设置运行到:

export CATALINA_OPTS="-Xmx512m  -XX:MaxPermSize=256m"

但这取决于你的应用的大小。