我正在研究Java内存堆分配,我认为我做了一些事情,不仅为任何特定的tomcat文件夹设置了内存堆分配,而且为整个系统设置了内存堆分配,因为我不能在Spring中运行我的应用程序,也不能使用我一直用于测试的自定义tomcat文件夹。正在初始化Spring根Web应用程序上下文””。
我不太清楚如何在Linux命令行上通过执行"export CATALINA_OPTS="-Xms2000m -Xmx4500m"
或"JAVA_OPTS="-Xms2000m -Xmx4500m -XX:MaxPermSize=4500m"
之类的操作来设置此参数
我想我不小心把我的云服务器的设置(它有更高的内存量),所以我给了它更多的内存分配比我的整个系统有。
如果有人能让我知道我是否有可能这样做,如果这可能导致问题,以及我如何从我的系统中获得关于当前分配的输出,以便我可以检查/更改它,我将不胜感激。我已经尝试了"export CATALINA_OPTS="-Xms2000m -Xmx4500m"
,但它仍然不适合我。
我想把所有东西都恢复到默认设置。我通常在tomcat文件夹的/bin/ www.example.com文件中设置内存堆分配startup.sh,但我想我已经忘记了这一点,我正在命令行上试验。
谢谢
4条答案
按热度按时间zrfyljdw1#
检查Tomcat的所有日志文件。可能是Spring WebApplicationContext的启动遇到了错误,但将其记录在了其他位置。
对于Tomcat来说,将最大堆大小设置得太大听起来像是在转移注意力。如果初始堆大小参数大于系统上的最大内存大小,Java进程将立即失败- Tomcat将无法初始化Spring应用程序。
jutyujz02#
如果您是从IDE运行服务器,请查看是否可以增加服务器超时。在命令行中,您必须等待。如果问题仍然存在,请尝试清理/重新加载应用程序
zzoitvuj3#
调试器不就是用来查找bug的吗?为什么不简单地在调试模式下启动Tomcat,等到它“挂起”,然后通过挂起相关的线程并查看堆栈跟踪来了解它正在做什么呢?
或者更简单,在应用程序挂起后执行“线程转储”?
2izufjch4#
对我来说,这是另一项无法获得的服务