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