序言

笔者认为大致内存问题,或者是 server.xml 文件内的 docBase 配置问题,但内存问题看参考资料写的,说是会报 out of memory 等 error 问题,可是笔者没看到类似 out of memory,tomcat 服务器都是直接自动退出的,tomcat 服务器的每一个日志都看不出任何具体的 error 问题所在,所以只能靠摸索验证。

问题位置 1

配置内存,比如当前内存剩余 ≤ 2G,那么不应该配置 ≥ 2G 的内存。

bash 查看内存命令:

free -h

启动文件修改

Windows 系统没遇到过这种问题,不清楚是否可以,自行测试。

windows环境下,tomcat下的~/bin/catalina.bat文件,在文件头部加入:
set “JAVA_OPTS=%JAVA_OPTS% -server -Xms5120m -Xmx10240m -XX:PermSize=640M -XX:MaxPermSize=2560m”

linux环境下,tomcat下的~/bin/catalina.sh文件,在文件头部加入: JAVA_OPTS=“$JAVA_OPTS
-server -Xms4096m -Xmx6144m -XX:PermSize=256m -XX:MaxPermSize=2048m” 重启tomcat,即可。

配置演示:

centos查看系统死机日志_centos

Linux 配置:

重点是 -XX:MaxNewSize=512m -XX:MaxPermSize=512m ,如果内存小于 500M 那么,也会无法启动 tomcat 服务器的,所以需要修改为小于内存的配置,比如 300M 内存,那么需要配置为 200M 。

Linux 1G 的内存配置:

JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx6000m -Xss1024K -XX:MaxNewSize=512m  -XX:MaxPermSize=512m"

Linux 2G 的内存配置:

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx6000m -Xss1024K -XX:MaxNewSize=512m  -XX:MaxPermSize=512m"

Linux 4G 的内存配置:(感觉这个好像也不太行,笔者是配置 1G 的,问题才解决,当然具体问题具体分析,如果剩余内存剩下 3G ,那么可以配置为 2G 的。不过如果内存变化太大,在不影响性能的前提下,建议配置 1G 内存。)

JAVA_OPTS="$JAVA_OPTS -server -Xms4096m -Xmx6144m -XX:PermSize=256m -XX:MaxPermSize=2048m"

问题位置 2

server.xml 配置的 docBase 路径问题,笔者之前看到了一些配置是指向 .war 文件的,笔者也跟着配置指向 .war 文件,后面察觉有些日志有一些 No Spring WebApplicationInitializer types detected on classpath

感觉应该有些问题,不放过任何可能的迹象。

搜了一下,说是找不到具体的 xml 配置问题,看到这里,反应过来了,之前资料说 tomcat 是通过解压 .war 文件,对解压后的文件夹,监听某个端口,来进行 webapps 内应用的服务,所以,是不是笔者,对于指向 .war 文件,其实是一个会让 tomcat 找不到具体的 .xml 或者 jar 服务文件(即 jar 包)的问题,所以笔者就修改了指向,.war 解压后的文件夹名,而且还是绝对路径的。

总结

看到这里,笔者是两个问题一起解决,所以后面也不会出现刚启动没多久,tomcat 就自动退出,导致 web 服务卡在某个地方,然后得重启 tomcat 服务器。
后面笔者觉得,其实 docBase 的路径指向为 .war 文件,应该是没问题,但是指向为文件夹,是比较逻辑正确的,毕竟指向压缩包,在笔者看来其实是比较不合理的。