一、Tomcat内存溢出的解决方法
内存溢出一般有如下三种常见的原因:
- OutOfMemoryError: Java heap space
- OutOfMemoryError: PermGen space
- OutOfMemoryError: unable to create new native thread
那么怎么解决这三种常见的情况呢?
1、OutOfMemoryError出现原因
JVM在启动的时候会默认设置Heap size的值,即初始空间(-Xms)设置为物理内存的1/64,最大空间(-Xmx)设置为物理内存的1/4。而JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将就会抛出OutOfMemoryError异常。要解决我们就不使用默认设置手动给初始空间和最大空间配置空间就解决了。
2、不同环境的解决方法
①Linux环境下的Tomcat
在apache-tomcat-5.5.23/bin 目录下找到catalina.sh
在第一行的后面添加上:JAVA_OPTS='-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M'(单引号不要少了,server模式运行效率比默认的client会高)
②windows环境下的Tomcat
在apache-tomcat-5.5.23/bin 目录下找到catalina.bat
在第一行的后面添加上:set JAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M
③IntelliJ IDEA开发环境设置Tomcat
在vm options设置 -server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M
④eclipse开发环境
如上图,在红色圈中填写-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M
以上就是4种常见环境的内存溢出的解决方案。
二、Tomcat虚拟目录配置
公司的需求千变万化,你完全不知道下一刻会遇到什么样的坑或者其他什么让人无奈的情况。
先说一下怎么配置Tomcat的虚拟目录:
①找到apache-tomcat-7.0.82\conf目录下的server.xml
在<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">标签里面添加
<Context path="/app" docBase="c:\project" reloadable="true" crossContext="true" />标签
②Context 标签属性说明:
path:访问资源的url入口,用浏览器http://localhost:8080/app/123.txt,就能访问到c:\project目录下的123.txt文件了。
docBase:作用映射指定的文件夹或者文件(包括项目),路径可以是给定的绝对路径,也可以是相对路径,相对路径是相对于webapps 的路径。
reloadable:这个属性设为 true,tomcat在运行状态下会监视在classes 和lib 目录下class 文件的改动并且自动重新加载 Web 应用。(建议:生产环境最好不要设置为true,较耗资源。)
crossContext:这个属性跟应用挂钩,如果docBase映射的是一个项目,改属性设置为true时,应用调用 ServletContext.getContext()时会返回在该虚拟主机上运行的其他 web application。考虑安全性的话就将该属性设置为false,这样getContext()返回的则是 null。
③注意事项
docBase设的路径可以是文件夹也可以具体的文件。
Windows环境docBase的路径是用\来分割目录,而虚拟机环境则是用/来分割目录,不然启动Tomcat会报错。
欢迎评论,相互学习相互促进。