写给领导的一封web软件提速建议email ,没有服务器带宽的情况下我们如何可以作的更好!

本文提出了五种不增加服务器成本即可显著提升Web性能的方法,包括优化web服务器软件及配置、采用JNDI数据库连接、改进Java Web程序、定期清理日志及重启服务器等。
提升现在的软件性能,可以提升整体的web速度,可以节省些服务器费用
每次周一例会,运维经理和领导都为服务器花钱的事情伤透了脑筋!我询问了我们51ditu运维人员,分析了我们的目前网站结构,总结了几点觉得不用购买服务器也可以提升很大一块性能。(我从05年在51ditu,经历过最艰苦没有钱买服务期的状态,明白软件的改造可以明显起到效果。)
1、采用最优化的apache/tomcat web服务器软件和压缩方式
我周四出差前亲口咨询了口碑的技术总监,他告诉我口碑网的 apache 2.2.4 + tomcat 5.5.20性能比我们的apache2.0tomcat5.0.28性能要明显好一些(我看了apache官方文档,apache2.2.4性能应该更好些)。
我们目前处理静态页面服务器是 apache2.0单线程+mod_deflate,我之前一直用apache2.0+gzip,我查了资料应该用apache2.2 +mod_deflate效果会最好。
部署方法:LoadModule deflate_module modules/mod_deflate.so (下面这段配置必须加上,我们线上的apache好像没有下面这段内容)
<ifmodule mod_deflate.c>
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
</ifmodule>
 
我应该可以比较肯定的认为:apache2.2.10(mod_deflate/mod_jk)+tomcat5.5.20 的软件升级可以立刻改进服务性能质量
2apache 修改配置(MaxRequestPerChildMaxClientsAllowOverrider None禁止查找.htaccess、等)
这一块光华以前说过,但是我看我们很多地方还是没有注意。特性造成的损失,对于安全控制,可以在设置文件中针对根目录指定AllowOverrider None禁止查找.htaccess文件,只对于特定需要访问控制的目录才打开访问控制功能。此外,还要设置XbitBackOff来关闭缺省文档的SSI 功能,只使用AddHandler指令执行SSI文档。
为了避免一个进程服务提供过多的次数的服务造成内存垃圾,Apache定义了一个MaxRequestPerChild来规定一个进程提供服务的次数,缺省设置为30。如果服务器提供的为静态网页,产生内存垃圾的机会就很少,可以将其设置为2000或者更高。即使服务器载入了各种不同的功能模块,产生内存垃圾的机会就多一些,可以相应将这个值的设置降低一些。
为了避免服务器进程在系统空闲时被无意义的杀死,可以简单的将MinSpareServersMaxSpa reServersStartServers的值设置为与MaxClients的值相同。这种设置方式对于总是处于重负载的专业Web站点的设置方式,对于业余站点,就没有必要如此设置,这些值都可以设置得较小,以便来没有客户访问时,系统负载可以降低,留出处理能力完成其他任务。
为了确定服务器的最优设置,可以通过使用Apache提供的一个性能测试软件ab来进行模拟访问,这个程序缺省被安装到/usr/local/sbin中。例如使用ab向本地服务器的一个网页同时发起50个连接,共进行1000次连接,就执行:
bash-2.02$ /usr/local/sbin/ab -n 1000 -c 50 localhost/
This is ApacheBench, Version 1.2
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/
Server Software:         Apache/1.3.4
Server Hostname:         localhost
Server Port:             80
Document Path:           /
Document Length:         360 bytes
Concurrency Level:       50
Time taken for tests:    3.881 seconds
Complete requests:       1000
Failed requests:         0
Total transferred:       607212 bytes
HTML transferred:        360720 bytes
Requests per second:     257.67
Transfer rate:           156.46 kb/s received
Connnection Times (ms)
               min    avg    max
Connect:         0      0      1
Processing:     26    190   1034
Total:          26    190   1035
先调整相应的设置,然后使用ab模拟真实情况下的连接,来测试服务器的性能,并进一步调整参数以获得最佳的设置。
这一块优化需要我们不断测试,根据不同的应用配置不同的参数。因为不同的应用连接数是不同的,多了浪费资源,少了访问量大的时候性能不好。
3、采用数据库JNDI连接代替数据库连接池
尽管jndi也是数据库连接池,但是他通过tomcat自身管理,性能更加优化,路书项目就是采用jndi数据库连接速度很显著提升。不过这需要对目前的软件进行改善,工作量虽然不是很大。但是现在新项目很多积不出时间来
4java web程序改进
禁止servletJSP 自动重载(auto-reloading)Servlet/JSP提供了一个实用的技术,即自动重载技术,它为开发人员提供了一个好的开发环境,当你改变servletJSP页面后而不必重启应用服务器。然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它会给JSP引擎的类装载器(classloader)带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。这个应该在51ditu生产机上使用,不要图省事,以为tomcat不用重启服务器了。
不要滥用HttpSession通过如下的JSP页面指示符来禁止它:<%@ page session="false"%,尽量将session的超时时间设得短一点。不要在HttpSession中存放大的数据对像:HttpSession中存放的数据对像越大,那系统的性能就下降得越快。这个如果要修改可能程序改动东比较大,但是用www4大频道可以先禁止session提升效率
servlet页面输出进行压缩servletJSP页面生成的HTML页面进行压缩的话,那用户就会觉得页面浏览速度会非常快
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
 OutputStream out = null
 String encoding = request.getHeader("Accept-Encoding");
 if (encoding != null && encoding.indexOf("gzip") != -1)
 {
  request.setHeader("Content-Encoding" , "gzip");
  out = new GZIPOutputStream(request.getOutputStream());
 }
 else if (encoding != null && encoding.indexOf("compress") != -1)
 {
  request.setHeader("Content-Encoding" , "compress");
  out = new ZIPOutputStream(request.getOutputStream());
 }
 else
 {
  out = request.getOutputStream();
 }
 ...
 ...
}
没有见别人用过,但我觉得可以尝试先内部测试一下。
 
5、定期删除日志和重启服务器
这个好像我们目前的运维组就是这样做的,有定时的脚本会自动重启,但不知道日志是否定时删除!
 
 
我觉得 125点是最有效也是目前最可行的立竿见影的软件提速方法。34虽然有点工作量,但在短期内应该可以完成。本来这封信应该在周4发出去,但是我出差了2天,一直没有时间。我想大家最好能在周一例会上定一下就仓促准备了一下。大家看看有没有道理。我觉得我们应该尽快测试,实施上去。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值