Web系统性能调优

                                                        Web系统性能调优最佳实践
  最快速有效的提升性能办法:更改服务器硬件配置,不过这需要支付高额的费用。而我们能够做的往往是从软件方面提升性能。
  下面以前期为例,介绍Web系统性能改善。
  前期开发环境
  数据库: Oracle 10g
  应用服务器:WebSphere Application Server 6.1
  框架:Spring、ibatis、JIL
  我们总希望以最小的改动,或得最大的性能提升。按照调优优先级,我们分别介绍Oracle优化,应用服务器优化,代码优化。

1 Oracle优化
  SGA, 索引,物化视图,SQL语句优化 (待完善。。。)
2 应用服务器优化
  2.1 JVM优化
    大部分JVM实现允许用户设置JVM Heap大小。开发者可以按照需要调整Heap大小。Heap不宜太大或太小。如果JVM Heap内存太少,则GC(Garbage Collection)要频繁的运行,使得应用经常处于暂停状态。另外,如果JVM Heap分配过多,则GC不会频繁的运行,但是一旦GC运行,它要遍历整个Heap空间,并回收内存,引起长时间的应用停止等待。
理想情况下 GC 周期应该:
    1)发生间隔大于 10 秒
    2)在 1 至 2 秒内完成
   对应WebSphere,我们可以借助wsadmin和Jython脚本确定你的Heap空间是否太大或太小.   

  2.2 调整连接池
   调整合适的连接池大小。一般的应用服务器都允许设置初始池大小、最大池大小、逐增(减)池大小。连接池过大,占用大量持久化提供者资源和RDBMS服务器资源,能够处理的并发请求越多。连接池过小,占用资源少,但能够处理的并发请求少,影响服务性能。
    小型(4 个 CPU)数据库服务器的“最佳状态”是提供 100-200 个连接。WebSphere 作为数据库服务器前面的一个连接集线器。连接池的大小限制了开放多少数据库连接来受理传入的页面请求。

 2.3 web容器的线程池
   线程的数量影响同时并发的请求数量,适度地增加线程池以保证 CPU 能够接受。一般一个 CPU 可以驱动 50 到 75 Java 线程。
   打开管理控制台,依次打开目录树,Application servers > server1 > Thread Pools > WebContainer,修改"最大大小"的值,默认是50,改到更大数目,具体视总用户数量和机器的配置而定,一般设置其等于或小于http server设置的MaxKeepAliveRequests的值。

  2.4 启用servlet高速缓存
  1. Open the administrative console.
  2. Click Servers > Application Servers in the console navigation tree.
  3. Click a server.
  4. Click Web Container.
  5. Select Enable servlet caching under the Configuration tab.
  6. Click Apply or OK.
  7. Restart WebSphere Application Server. 
 

3 代码优化
  3.1 Cache中间件
    如果一个应用中80% 的时间内都在访问20% 的数据,那么,这时候就应该使用缓存了。在合适的地方加Cache. 假如你的框架是page->filter->action->business->dao->db,我们在filter、action、business、dao、db之间都可以加Cache。但我们应该在尽量离用户近的地方加Cache。如加到filter前,这样当用户请求走到filter的时候就结束了。无需在深入action、business、dao,减少服务器压力。
   Cache不变化的页面。如页面的公共静态部分Header, Footer.

  3.2 页面优化
  3.2.1异步加载。
     使用Ajax异步请求数据。提高系统相应速度。同时尽可能少的加载数据。在同一个页面中,如果某些数据是在用户触发某事件后才需要显示,我们没有必要一开始就加载其数据。如在页面同一区域存在多个Div。当用户点击时,才会显示其他Div,我们没有必要一开始就加载所有数据。减少服务器压力。

  3.2.2关闭session。
如果Web应用是无状态的,我们应使用<%page session=”false” %>来关闭session。Session管理对系统性能影响极大。

   3.2.3 一次Http请求尽量在一个事务里完成,减少与DB的交互。

   3.3编写JVM友好代码。
   我们在编写Java代码过程中,要及时将不再使用的对象释放。将对象的引用置为null。特别是大对象内存的释放。如:DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 如果使用完毕应立即将其置为null。如果为null,JVM便知道不再需要它了。GC(Garbage Collection)会回收分配给它的内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值