tomcat 啓動報錯

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

           https://geeksun.iteye.com/blog/1853744

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章