Tomcat7 优化 :
1.conf/ server.xml :
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="50"/>
<Connector executor="tomcatThreadPool"
port="8888" protocol="HTTP/1.1"
connectionTimeout="20000" enableLookups="false"
redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000"
compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>
compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain
-- 启用 tomcat GZIP 压缩.
- compression="on" 打开压缩功能
- compressionMinSize="50" 启用压缩的输出内容大小,默认为2KB
- noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩
测试方法
通过浏览器直接请求
通过程序模拟请求
- @Test
- public void testGzip() {
- HttpClient httpClient = new HttpClient();
- GetMethod getMethod = new GetMethod("http://localhost/admin.jsp");
- try {
- getMethod.addRequestHeader("accept-encoding", "gzip,deflate");
- getMethod.addRequestHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)");
- int result = httpClient.executeMethod(getMethod);
- if (result == 200) {
- System.out.println(getMethod.getResponseContentLength());
- String html = getMethod.getResponseBodyAsString();
- System.out.println(html);
- System.out.println(html.getBytes().length);
- }
- } catch (HttpException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- getMethod.releaseConnection();
- }
- }
执行这个junit程序,看看它所输出的是什么内容,如果输出的是一些乱码,并且打印内容的长度远小于实际的长度,就说明我们的配置生效了,通过一些其它验证工具,会发现网站浏览速度会明显提升。
代码如下:
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 5000
</IfModule>
重启apache,测试,负载够用了:)
Listen 80
KeepAliveTimeout 15
MaxKeepAliveRequests 1000
最能反应Apache服务器性能的Requests per second,即每秒完成的请求次数从201.32提升到341.70,提升幅度为70%。虽然在现实环境中,不可能有这么多的同一连接发出的请求,但启用KeepAlive确实在一定程度上可以提高Apache服务器的吞吐量和反应速度。
4. 打开UseCanonicalName模块 UseCanonicalName on
根据实际经验,通过Apache和Tomcat集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个Tomcat的处理来分担单Tomcat时的压力。
三:Apache 的 MPM(Multi -Processing Modules,多道处理模块):
1.Apache 的 MPM(Multi -Processing Modules,多道处理模块),经过适当的配置,可以提高服务器的负载能力 。
Linux和Windows版本的Apache ,MPM不尽相同,感觉Linux更强大些,可以同时开好几个进程进行Apache的响应。
我机子上的是Wamp环境,在httpd.conf中有这样一段:
# Server-pool management (MPM specific) # Include conf/extra/httpd-mpm.conf
注释掉,在httpd-mpm.conf中,会出现好几种类型的配置,要根据自己的具体环境配置相应的文件 。
看到里面有mpm_winnt.c ,我们就在httpd-mpm.conf的<IfModule mpm_winnt_module>进行配置
<IfModule mpm_winnt_module> ThreadsPerChild 150 MaxRequestsPerChild 0 </IfModule>
其中,ThreadsPerChild 是指一个进程最多拥有的线程数(Windows版本,貌似不可以开启多个进程),一般100-500就可以,
根据服务器的具体性能来决定。MaxRequestsPerChild,是指一个线程最多可以接受的连接数,默认是0,就是不限制的意思,
但是网上有文章说,0 会导致内存泄露。所以,可以根据实际情况,配置一个比较大的值。我估计Apache会在几个线程之间进
行轮询,找到负载最轻的一个线程来接受新的连接。
另附: Apache 官方MPM说明http://httpd.apache.org/docs/2.2/zh-cn/mpm.html 。