tomcat內存溢出常見異常及其原因包括outofmemoryError:Java heap space,這通常是由于堆內存已滿,堆內存的默認最大值是系統內存的1/4,最小值是1/64;outofmemoryerror:permgen space,這通常是由于靜態內存區已滿,但在jdk 8及以上版本中已不存在此問題;stackoverflowerror,這通常是由于棧內存已滿,常見于死循環或遞歸導致的內存配置問題。
要修改tomcat的內存配置,需要編輯Tomcat的bin文件夾中的catalina文件。對于windows系統,修改.bat文件;對于linux系統,修改.sh文件。在文件的第二行加入以下代碼,Windows系統需去掉前面的set:
set JAVA_OPTS="-server -Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
修改Tomcat的默認8005端口,需要編輯Tomcat的conf文件夾中的server.xml配置文件,修改其中標注的端口號或SHUTDOWN命令:
修改端口號是一個安全配置項,因為默認情況下,如果知道遠程Tomcat服務器的IP,可以通過telnet命令直接關閉遠程Tomcat,這是一個非常嚴重的安全隱患。
為了避免針對特定版本的攻擊風險,可以修改或隱藏Tomcat的版本號。需要修改Tomcat的lib文件夾中的catalina.jar包,右鍵選擇使用壓縮工具打開,并修改圖中所示的位置:
禁用Tomcat的管理頁面可以通過將tomcat-webapps-ROOT文件夾重命名,并新建一個空的ROOT文件夾來實現。因為Tomcat默認通過IP:端口訪問的是ROOT文件夾。
要自定義錯誤頁面,需要在空的ROOT文件夾中新建一個錯誤的html頁面,并在conf文件夾中的web.xml配置文件的末尾加入以下代碼,其中error.html是你自定義的錯誤頁面:
<error-page> <error-code>400</error-code> <location>/error.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/error.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/error.html</location> </error-page>
啟用Cookie的HttpOnly屬性可以防止JavaScript腳本獲取Cookie信息,從而避免xss(跨站腳本攻擊)。需要在Tomcat的conf文件夾中的context.xml文件中,在圖中所示的位置添加useHttpOnly=”true”: