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”: