电脑
jdk,Tomcat
工作中在用Tomcat开发的时候,偶尔会碰到内存溢出的现象,也就是OutOfMemoryError异常,这是什么原因引起的呢?该异常出现的原因:JVM在启动的时候会默认设置Heap size的值,即初始空间(-Xms)设置为物理内存的1/64,最大空间(-Xmx)设置为物理内存的1/4。而JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将就会抛出OutOfMemoryError异常。要解决我们就不使用默认设置手动给初始空间和最大空间配置空间就解决了。
那么出现这种问题需要怎么解决呢?这需要根据不同的环境来决定的,主要总结以下四种:①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
找到apache-tomcat-7.0.82\conf目录下的server.xml 在
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。
配置虚拟目录时注意:1.docBase设的路径可以是文件夹也可以具体的文件
配置虚拟目录时注意:2.Windows环境docBase的路径是用\来分割目录,而虚拟机环境则是用/来分割目录,不然启动Tomcat会报错。