1.Tomcat之并发优化:
1.1位置
/opt/tomcat7/conf下的server.xml文件中<Connector>节点的配置优化,记得先备份
1.2优化
- 标准版
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
connectionTimeout="20000"
redirectPort="8443" />
- 复杂版
<Connector port="8080"
protocol="HTTP/1.1"
URIEncoding="UTF-8"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
acceptCount="300"
maxThreads="300"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain"
redirectPort="8443"/>
注意:坑爹
指定JDK路径动态配置
一般情况下我们都是让Tomcat根据配置的java_home环境变量自动去找jdk路径,
但当同一台服务器有不同的服务,且使用不同的jdk版本是就会出现问题。
我们可以在catalina.sh脚本文件(windows系统下为catalina.bat)中动态设置JAVA_HOME解决此问题。
1.3参数逐项说明
URIEncoding=”UTF-8”
使得tomcat可以解析含有中文名的文件的url,在server.xml文件的Connector标签中
增加URIEncoding="UTF-8"属性,解决中文参数乱码问题。
minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数,默认10.
maxSpareThreads
enableLookups
disableUploadTimeout:connectionTimeout:网络连接超时,单位毫秒。设置为 -1 表示永不超时
connectionTimeout
acceptCount
maxThreads
maxProcessors
minProcessors
useURIValidationHack:减少它对一些url的不必要的检查从而减省开销,为提高性能可以设置为false
compression
compressionMinSize:compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType:compressableMimeType:哪些类型需要压缩,默认是text/html,text/xml,text/plain
enableLookups:
如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户的实际主机名,将enableLookups设为true。
如果希望忽略DNS查询,仅仅返回IP地址,设为false(这样提高了性能)。
缺省情况下,DNS查询是使能的。
一句话:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
disableUploadTimeout:
disableUploadTimeout="true",
类似于Apache中的keeyalive一样,是否需要tomcat容器单独设置上传时间限制,
这里是不用,还是使用标准的,不去给上传的附件单独做超时设置。
acceptCount:
acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是
这个队列的大小,如果这个队列也满了,就直接refuse connection
一句话:acceptCount:当处理任务的线程数达到最大时,接受排队的请求个数,默认100
maxThreads:
maxThreads:最大线程数,即同时处理的任务个数,默认值为200
Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,
即最大并发数。
保守推荐:600---900
minProcessors:
在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。
多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
通常Windows是1000个左右,Linux是2000个左右。
compression:
compression :设置是否开启GZip压缩
HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,
由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为
重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
1.4超时控制
修改conf/web.xml配置文件,设置session-timeout的值(单位:分钟)
注意:
最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,
我们将会用到8443端口这个段的配置
2.Tomcat之内存优化
查看%TOMCAT_HOME%\logs文件夹下,日志文件是否有内存溢出错误
1.错误提示:java.lang.OutOfMemoryError: Java heap space
导致原因:
Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。
常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,
一般调整Tomcat的使用内存即可解决此问题。
public static void main(String[] args)
{
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+" M");
byte[] byteArray = new byte[1*1024*1024*650];
System.out.println("#######3");
}
windows环境下修改:
“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -
XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -
XX:NewRatio=2 -XX:+DisableExplicitGC
Linux环境下修改:
“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:
JAVA_OPTS=-Xms2048m -Xmx2048m
2.错误提示:java.lang.OutOfMemoryError: PermGen space
导致原因:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存
放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre-compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
windows环境下修改:
“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m - XX:MaxPermSize=256m
Linux环境下修改:
“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:
export JAVA_OPTS=-Xms256m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m
XX:MaxPermSize=256m