设为首页 收藏本站
查看: 544|回复: 0

[经验分享] Apache2.2优化&&Tomcat优化

[复制链接]

尚未签到

发表于 2017-1-24 08:47:06 | 显示全部楼层 |阅读模式
  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" 哪些资源类型需要压缩


测试方法


启用了TOMCAT这个压缩功能后,我们如何来测试压缩是否有效呢?

首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,我们可以用两种方法来验证压缩是否生效。


通过浏览器直接请求


       大家直接通过浏览器访问启用了压缩配置的服务器,然后通过抓包工具查看抓到的数据包,如果内容有很多你看不懂,就说明已经启用压缩功能了。


通过程序模拟请求


我们用httpclient写一个简单的测试程序,代码如下:


[java] view plaincopyprint?





  • @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();  
  •         }  
  • }  
          @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程序,看看它所输出的是什么内容,如果输出的是一些乱码,并且打印内容的长度远小于实际的长度,就说明我们的配置生效了,通过一些其它验证工具,会发现网站浏览速度会明显提升。

 

备注:如果发现内容没有被压缩,可以考虑调整compressionMinSize大小,如果请求资源小于这个数值,则不会启用压缩。

 二: apache2.2 优化:


1.修改conf/httpd.conf ,查找”Include conf/extra/httpd-mpm.conf” 去掉前面的注释符号’#’

2. 打开conf/extra/httpd-mpm.conf 查找”<IfModule mpm_winnt_module>” ,将其下面的ThreadsPerChild 的值调大,比如默认150的,改为300或600或1500等等。此处需要注意,如果服务器的配置较低的话,你设置的ThreadsPerChild 的值又太大会导致cpu过高,并且波动很大。  代码如下:


  •   <IfModule mpm_winnt.c> 

  •   ThreadsPerChild 250 

  •   MaxRequestsPerChild 5000 

  •   </IfModule> 

  重启apache,测试,负载够用了:)

 

3. 在Apache的配置文件httpd.conf中,设置: 
Listen 80

以下:

KeepAlive on
KeepAliveTimeout 15
MaxKeepAliveRequests 1000


UseCanonicalName on


最能反应Apache服务器性能的Requests per second,即每秒完成的请求次数从201.32提升到341.70,提升幅度为70%。虽然在现实环境中,不可能有这么多的同一连接发出的请求,但启用KeepAlive确实在一定程度上可以提高Apache服务器的吞吐量和反应速度。 
4.  打开UseCanonicalName模块  UseCanonicalName on

5. 关闭多余模块  一般来说,不需要加载的模块有,mod_include.so、mod_autoindex.so、mod_access.so、mod_auth.so.




    根据实际经验,通过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 。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332666-1-1.html 上篇帖子: tomcat 启动错误浅谈 下篇帖子: Tomcat 配置学习笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表