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

提升现在的软件性能,可以提升整体的web速度,可以节省些服务器费用
每次周一例会,运维经理和领导都为服务器花钱的事情伤透了脑筋!我询问了我们 51ditu 运维人员,分析了我们的目前网站结构,总结了几点觉得不用购买服务器也可以提升很大一块性能。(我从 05 年在 51ditu ,经历过最艰苦没有钱买服务期的状态,明白软件的改造可以明显起到效果。)
1 、采用最优化的apache /tomcat web 服务器软件和压缩方式
我周四出差前亲口咨询了口碑的技术总监,他告诉我口碑网的 apache 2.2.4 + tomcat 5.5.20 性能比我们的 apache2.0 tomcat5.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 的软件升级可以立刻改进服务性能质量
2 apache 修改配置( MaxRequestPerChild MaxClients AllowOverrider None 禁止查找 .htaccess 、等)
这一块光华以前说过,但是我看我们很多地方还是没有注意。特性造成的损失,对于安全控制,可以在设置文件中针对根目录指定 AllowOverrider None 禁止查找 .htaccess 文件,只对于特定需要访问控制的目录才打开访问控制功能。此外,还要设置 XbitBack Off 来关闭缺省文档的 SSI 功能,只使用 AddHandler 指令执行 SSI 文档。
为了避免一个进程服务提供过多的次数的服务造成内存垃圾, Apache 定义了一个 MaxRequestPerChild 来规定一个进程提供服务的次数,缺省设置为 30 。如果服务器提供的为静态网页,产生内存垃圾的机会就很少,可以将其设置为 2000 或者更高。即使服务器载入了各种不同的功能模块,产生内存垃圾的机会就多一些,可以相应将这个值的设置降低一些。
为了避免服务器进程在系统空闲时被无意义的杀死,可以简单的将 MinSpareServers MaxSpa reServers StartServers 的值设置为与 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 数据库连接速度很显著提升。 不过这需要对目前的软件进行改善,工作量虽然不是很大。但是现在新项目很多积不出时间来
4 java web 程序改进
禁止 servlet JSP 自动重载 (auto-reloading) Servlet/JSP 提供了一个实用的技术,即自动重载技术,它为开发人员提供了一个好的开发环境,当你改变 servlet JSP 页面后而不必重启应用服务器。然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它会给 JSP 引擎的类装载器 (classloader) 带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。这个应该在 51ditu 生产机上使用,不要图省事,以为 tomcat 不用重启服务器了。
不要滥用 HttpSession 通过如下的 JSP 页面指示符来禁止它:< %@ page session="false"% ,尽量将 session 的超时时间设得短一点。不要在 HttpSession 中存放大的数据对像: HttpSession 中存放的数据对像越大,那系统的性能就下降得越快。这个如果要修改可能程序改动东比较大,但是用 www4 大频道可以先禁止 session 提升效率
servlet 页面输出进行压缩 servlet JSP 页面生成的 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 、定期删除日志和重启服务器
这个好像我们目前的运维组就是这样做的,有定时的脚本会自动重启,但不知道日志是否定时删除!
 
 
我觉得 1 2 5 点是最有效也是目前最可行的立竿见影的软件提速方法。 3 4 虽然有点工作量,但在短期内应该可以完成。本来这封信应该在周 4 发出去,但是我出差了 2 天,一直没有时间。我想大家最好能在 周一例会上定一下就仓促准备了一下。大家看看有没有道理。我觉得我们应该尽快测试,实施上去。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值