我的Grails应用程序部署在Tomcat 6中AWSEC2实例中。我遇到的问题是它无法启动并不断收到错误:OutOfMemoryError:无法创建新的本机线程。当我运行VisualVM时,似乎创建了很多线程,大约1,000个。我不太熟悉使用此工具,似乎无法确定代码的哪一部分创建了这么多线程。我注意到的一件事是,当我禁用Hibernate二级缓存或将net. sf.ehcache.hibernate.EhCacheProvider更改为net.sf.ehcache.hibernate.SingletonEhCacheProvider时,线程数量显着减少。有没有一种工具可以基本上帮助我确定代码中的哪些地方导致线程创建的大量增加?
yourkitjava分析器在显示堆栈方面做得很好。NewRelic也是如此。有一些维护不善的东西,比如Grails Profiler插件。
您需要增加内存设置。进入tomcat的bin/setclasspath.sh
并将以下行附加到末尾:
export CATALINA_OPTS="-Xmx1024m -XX:MaxPermSize=512m"
我将其用于一个相当大的应用程序,因此您可以将内存设置运行为以下内容:
export CATALINA_OPTS="-Xmx512m -XX:MaxPermSize=256m"
但这取决于您的应用程序的大小。