1.报错信息为"Unable to complete the scan for annotations for web application [/portal] due to a StackOverflowError",系统在本地能跑起来,但放到服务器跑不起来。
原因1:tomcat的栈内存不够,
解决:
【linux系统】修改配置文件catalina.sh【linux,bin文件夹】文件。
a>找到 #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" 这一行;
b>去掉前面的 #;
c>在 $JAVA_OPTS 后面加上 "-Xms4096m -Xmx8192m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=2048m " 这些内容。
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx8192m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=2048m -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
【windows系统】修改配置文件catalina.bat【windows,bin文件夹】文件
a>找到 set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% 这一行;
b>将 %JAVA_OPTS% 换成 "-Xms4096m -Xmx8192m -Xss256K -XX:PermSize=512m -XX:MaxPermSize=2048m 。
其中:
-server
表示tomcat是运行在生产环境中
因为tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。
-Xms –Xmx
即JVM内存设置了,Xms是堆最小内存,Xmx是堆最大内存,把Xms与Xmx两个值设成一样是最优的做法,这样可以减少每次垃圾回收后JVM重新分配内在。
因此一开始我们就把这两个设成一样,使得Tomcat在启动时就为最大化参数充分利用系统的效率,这个道理和jdbcconnection pool里的minpool size与maxpool size的需要设成一个数量是一样的原理。
-Xss
每个线程的栈的大小,减少这个值可以生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限制生成。如果程序没有报StackOverFlow,可以设置成128K。
参考:https://blog.csdn.net/a503921892/article/details/39048767