前言:在各网站的论坛上,由于找不到与工作相符的技能,所以我会写一些刚进入工作的人和工作中不重视的技能和问题。 聪明的各位,请马上关闭文章。
ps :文中的标点符号都是英语。 请不要在意。 为了方便平时敲代码,中文输入法也默认了英语标点符号。 (防止标点符号引起的低级错误)。 完全是个人的原创见解。 如果错了,请批评指出。
tomcat的一般配置
在
修改Tomcat的访问端口
Tomcat安装目录的conf子目录下找到了server.xml文件。 大约70行左右。 如下图:所示
默认端口8080
可以看到其中有port=’8080 ‘。 一般来说,我在上线之前把这个改成了80。 然后,访问路径将变为http://localhost/。 图中的其他属性将保持不变(与上一篇文章中更改项目访问路径的情况相匹配)
修改Tomcat的编码格式
继前一个端口配置之后,将属性uri编码=’ utf-8 ‘添加到连接器标签中。 虽然构成内容这么简单,但是这里简单说明一下为什么要增加这个构成,以及原理。
编码格式设置
默认情况下,Tomcat以ISO8859-1编码的形式对用户(浏览器端)打包的请求内容进行开箱解码(理解为request ),调用我们编写的业务逻辑程序,生成iso 8859,
这里提到了乱码,下面总结一下避免乱码问题的方法,谈谈几个重要的配置领域
1 .容器层:已经说明了tomcat容器必须构成开箱用的默认编码形式
2 .展示层:来到JSP,你应该知道我们都需要配置页面编码格式,一般我们需要配置在页面的最上面
设置jsp页顶部的编码格式
在head标签中设置编码格式
3 .持久层:项目中使用的数据库也同样使用UTF-8的编码形式。 这是根据具体的数据库配置的,这里就不介绍了
4 .编码层:将我们创建的java项目的代码编码格式统一为UTF-8,以MyEclipse为例,右键单击我们的项目,点击properties
项目代码的编码格式
5 .业务层:将程序执行时的编码格式统一为UTF-8。 也就是说,在每个处理请求的位置都使用request.setcharacterencoding (‘ utf-8 ‘ )。 当然,我们没那么傻。 这样写很累,不方便维护,所以需要写一个通用的编码过滤器,在这个过滤器中放置request的编码格式。 如果你们公司用的是框架的话,这个我们就不用担心了。 列举springMVC的配置示例。 我们只需要在web.xml上配置一个叫做美丽雪糕的过滤器就行了。 下图:
在web.xml中设置编码格式
配置Tomcat内存(针对Java内存溢出详解)
其实我写这篇文章的中心在这里。 因为我在各类文章论坛上没有找到比较好的配置方案,所以我可能涉猎不够,但是在这里总结一下自己的使用心得和别人的见解。
常见问题一: Java.lang.out of memory error : javaheapspace—- JVM heap (堆)溢出
一般来说,如果电脑内存不足,我们开发的项目很大,就会发生这个错误。 说明原理:
JVM在启动时自动设置JVM Heap的值。 初始空间-Xms是物理内存的1/64,最大空间-Xmx不能超过物理内存。 Heap的大小为y
oung Generation 和Tenured Generaion 之和),在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息.
解决方法:手动设置JVM Heap(堆)的大小.
-server : 一定要作为第一个参数,在多个CPU时性能佳
-Xms : java Heap初始大小, 默认是物理内存的1/64.
-Xmx : java heap最大值,建议均设为物理内存的一半,不可超过物理内存.
常见问题二 : java.lang.OutOfMemoryError: PermGen space —-PermGen space溢出
一般电脑内存不够大,我们开发的项目Class类又比较多的时候,会出现该错误.下面解释一下原理:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域.由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出.
解决方法:手动设置MaxPermSize大小.
-XX:PermSize : 设定内存的永久保存区初始大小,缺省值为64M.(可使用visualvm.exe查看)
-XX:MaxPermSize : 设定内存的永久保存区最大 大小,缺省值为64M.(可使用visualvm.exe查看)
常见问题三 : java.lang.StackOverflowError —- 栈溢出
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的.函数的调用过程都体现在堆栈上了.调用构造函数的 “层”太多了,以致于把栈区溢出了.通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间.通常栈的大小是1-2MB的.通常递归也不要递归的层次过多,很容易溢出.
解决方法:修改我们的java程序.
不同环境下的Tomcat内存配置方法
在生产环境中Tomcat内存设置不好很容易出现jvm内存溢出.上一段落已经进行各类内存问题的详解以及配置参数的简要介绍,下面我们介绍一下各种环境下的具体配置方法.
1. 命令行展示的tomcat:
修改TOMCAT_HOME/yxdbbz/catalina.sh(windows中是catalina.bat), 位置cygwin=false前,添加如下语句
JAVA_OPTS=”-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m”
2.如果tomcat注册成了windows服务,使用tomcat目录中的/yxdbbz/tomcat8w.exe修改就可以了.如下图
3.如果要在myeclipse中启动tomcat,上述的修改就不起作用了,可如下设置:
Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的Optional Java VM arguments中添加如下内容:
-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m
最后说一句:不管配置什么,以及配置的参数值是多少,都需要不断的调试,不要轻易放弃,比如tomcat的内存配置,也不是越大越好,适合你的计算机配置才是最好的,所以需要配置后的多次测试
快三技巧准确率100s在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出.
解决方法:手动设置MaxPermSize大小.
-XX:PermSize : 设定内存的永久保存区初始大小,缺省值为64M.(可使用visualvm.exe查看)
-XX:MaxPermSize : 设定内存的永久保存区最大 大小,缺省值为64M.(可使用visualvm.exe查看)
常见问题三 : java.lang.StackOverflowError —- 栈溢出
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的.函数的调用过程都体现在堆栈上了.调用构造函数的 “层”太多了,以致于把栈区溢出了.通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间.通常栈的大小是1-2MB的.通常递归也不要递归的层次过多,很容易溢出.
解决方法:修改我们的java程序.
不同环境下的Tomcat内存配置方法
在生产环境中Tomcat内存设置不好很容易出现jvm内存溢出.上一段落已经进行各类内存问题的详解以及配置参数的简要介绍,下面我们介绍一下各种环境下的具体配置方法.
1. 命令行展示的tomcat:
修改TOMCAT_HOME/yxdbbz/catalina.sh(windows中是catalina.bat), 位置cygwin=false前,添加如下语句
JAVA_OPTS=”-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m”
2.如果tomcat注册成了windows服务,使用tomcat目录中的/yxdbbz/tomcat8w.exe修改就可以了.如下图
3.如果要在myeclipse中启动tomcat,上述的修改就不起作用了,可如下设置:
Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的Optional Java VM arguments中添加如下内容:
-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m
最后说一句:不管配置什么,以及配置的参数值是多少,都需要不断的调试,不要轻易放弃,比如tomcat的内存配置,也不是越大越好,适合你的计算机配置才是最好的,所以需要配置后的多次测试