在开发当中,当1个项目比较大时,依赖的jar包通常比较多,我们都知道,在利用服务器启动时,会将利用援用到的所有类通过ClassLoader顺次全部加载到内存当中。Java的逻辑内存模型大致分为堆内存、栈内存、静态内存区,也称持久区,该区的内存不会被GC回收。堆内存用于存储类的实例、数组等援用类型数据,也就是用new生成的对象,都寄存在这里,栈内存存储局部变量(如:方法参数),静态内存区存储常量、静态变量、类元数据信息(方法、属性等)。开发当中常遇到的3类内存溢出异常:
修改Tomcat的内存配置,打开$TOMCAT_HOME/bin/catalina.sh文件(Windows系统是catalina.bat文件),大楖在250行左右,在JAVA_OPTS参数上添加内存参数设置便可。完全的JVM参数设置以下所示:
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless"
-server参数:表示以服务模式启动,启动速度会略微慢1点,但性能会高很多。不加这个参数,默许是以客户端模式启动。
java.awt.headless=true参数:与图形操作有关,适用于linux系统。如生成验证码,含义是当前使用的是无显示器的服务器,利用中如果获得系统显示有关参数会抛异常,可通过jmap -heap proccess_id查看设置是不是成功。
主要配置Tomcat能处理的要求数,1个进程建议最多不要超过1000个线程,表面上看线程越多处理的要求越多,其实过量的线程会占用CPU在不同线程之间切换的资源,致使CPU在每一个线程上处理的时间片极期有限,反而会下降服务器的响应性能。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="100"
acceptCount="200"
maxIdleTime="30000"
enableLookups="false"
/>
Tomcat的并发要求处理数量=maxThreads + acceptCount
protocol:启用APR连接模式,提高异步IO处理性能。启用配置请参考:《开启Tomcat APR运行模式,优化并发性能》
maxThreads:最大能接受的要求数,默许为200
minSpareThreads:线程池最小活跃线程数,默许为25
acceptCount:等待处理的要求队列,默许为100,超过队列长度,服务器则谢绝客户端要求,直接返回403
maxIdleTime:如果1个线程在30秒之内没有活跃,则终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默许值是1分钟
enableLookups:如果为true,调用request.getRemoteHost会履行DNS反查,反向解析IP对应的域名或主机,效力较低,建议设为false。
更多参数设置,请参考Tomcat官方文档:http://tomcat.apache.org/tomcat⑻.0-doc/config/http.html
Tomcat默许没有配置管理员帐户的权限,如果要查看app的部署状态、通过管理界面deploy或undeploy,则需要在tomcat-user.xml中配置具有管理权限登录的用户。
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
Tomcat官网配置:http://tomcat.apache.org/tomcat⑻.0-doc/manager-howto.html
上一篇 EMIPLIB库分析一
下一篇 C#三十六 三层架构的实现