查看:2406|回复:0
如何对Tomcat容器性能进行优化发表时间:2013-01-15 13:28:55

洗心、革面。

0分享0主题0帖子

学徒一级

(初出茅庐)


打开tomcat安装目录\conf\server.xml文件,定位到这一行:
<Connector port="8080" protocol="HTTP/1.1"

这一行就是tomcat容器性能参数设置的地方,它一般都会有一个默认值,这些默认值是远远不够我们使用的,我们来看经过更改后的这一段的配置:

<Connector port="8080" protocol="HTTP/1.1"
2    
3    URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
4    
5    enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
6    
7    acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
8    
9    useURIValidationHack="false"
10    
11    compression="on" compressionMinSize="2048"
12    
13    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
14    
15    redirectPort="8443"
16    
17    />


解释:

ü URIEncoding=”UTF-8”

使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

ü maxSpareThreads

maxSpareThreads 的意思就是如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

ü minSpareThreads

最小备用线程数,tomcat启动时的初始化的线程数。

ü enableLookups

这个功效和Apache中的HostnameLookups一样,设为关闭。

ü connectionTimeout

connectionTimeout为网络连接超时时间毫秒数。



ü maxThreads

maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。



ü acceptCount

acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection



ü maxProcessors与minProcessors

在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常Windows是1000个左右,Linux是2000个左右。

ü useURIValidationHack

tomcat中的一段源码:
1    security
2    
3    if (connector.getUseURIValidationHack()) {
4    
5    String uri = validate(request.getRequestURI());
6    
7    if (uri == null) {
8    
9    res.setStatus(400);
10    
11    res.setMessage("Invalid URI");
12    
13    throw new IOException("Invalid URI");
14    
15    } else {
16    
17    req.requestURI().setString(uri);
18    
19    // Redoing the URI decoding
20    
21    req.decodedURI().duplicate(req.requestURI());
22    
23    req.getURLDecoder().convert(req.decodedURI(), true);
24    
25    }
26    }

可以看到如果把useURIValidationHack设成"false",可以减少它对一些url的不必要的检查从而减省开销。

ü enableLookups="false"

为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。

ü disableUploadTimeout

类似于Apache中的keeyalive一样

ü 给Tomcat配置gzip压缩(HTTP压缩)功能
compression="on" compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。

1)compression="on" 打开压缩功能

2)compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB

3)noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩

4)compressableMimeType="text/html,text/xml" 压缩类型

最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?
1    <!--enable tomcat ssl-->
2    
3    <Connector port="8443" protocol="HTTP/1.1"
4    
5    URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
6    
7    enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
8    
9    acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
10    
11    useURIValidationHack="false"
12    
13    compression="on" compressionMinSize="2048"
14    
15    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
16    
17    SSLEnabled="true"
18    
19    scheme="https" secure="true"
20    
21    clientAuth="false" sslProtocol="TLS"
22    
23    keystoreFile="d:/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa"
24    
25    />

所有的Tomcat优化的地方都加上了。

您需要登录以后才可以回帖    登录|注册