转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html

前言

最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来一起交流一下。如果本文中有您觉的错误的,或者不明白的,请加QQ群:4656272,欢迎指正和一起探讨。(ps:鄙人文笔很差,看官请多担待)

背景
朋友的平台网站属于垂直型的资讯社区网站,原先是用ASP.NET 1.0开发的,后来升级到ASP.NET 2.0,数据库为SQL SERVER 2000,操作系统为windows 2003 server,两台服务器,一台WEB服务器,一台数据库服务器。目前大概有80几万的用户帐户,有30多万条文章和200多W条帖子。随着数据量的增长,负载也越来越大,经常出现无法访问,访问出错或访问缓慢的情况。

解决
因为已经处于生产环境下,所以进行性能调优的前提是不影响现有的业务运行,可以进行无缝部署,如果出现问题可以迅速回退恢复。所以我准备分几次来做调优,这样比较稳妥的进行性能提升而不影响正常的业务运行。

第一步 运行环境调优
这一步很重要,在一个健康稳定的环境下,才能发挥平台最大性能表现,所以先给平台提供一个健康稳定的环境。
1 ASP.NET 环境调优
按照 《10 ASP.NET Performance and Scalability Secrets》http://www.tech-q.cn/thread-63-1-2.html里面所讲到的调优方法,经过跟开发人员的讨论,减少了一些ASP.NET中不必要的MODULE,优化了一些配置文件。

2 IIS环境调优
减少了IIS中的不必要的ISAPI加载,精简了IIS访问日志的格式,设置了IIS中针对图片文件,JAVASCRIPT,CSS等文件的内容过期,启用了IIS的GZIP压缩功能,按照http://support.microsoft.com/kb/922703/这篇文章,做了ETAG设置,以提高HTTP请求性能,根据实际情况对IIS的应用池进行设置调优。

3 SQL SERVER调优
将 SQL SERVER 2000 升级到 SQL SERVER 2005,按照《优化SQL Server 2000的设置》http://www.tech-q.cn/thread-1412-1-1.html 里面讲到的结合实际情况进行设置,并修改内存占用。我的建议:如果是单独的数据库服务器,那么尽可能的让SQL SERVER占用最多的内存。
经过第一步的调优,性能有所提升,体现在无法访问或者访问出错的情况减少了。所以开始进行第二步。

第二步 收集数据 找到平台性能弱点
根据IIS的访问日志,我做了一个24小时采样。找出了其中10个访问最多的页面和10个响应时间比较长的页面。根据MSDN《应用Profiler优化SQL Server数据库系统》http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx?mfr=true所说的方法,找到其中执行次数最多的10条SQL语句和执行时间比较长的SQL语句。提供给开发人员,并给出建议进行优化。
(一) 前端优化
其中访问最多的页面都是文章最终页和帖子最终页,这时我祭起目前已知最好的客户端调试工具FIREBUG,按照《初识Firebug 全文 — firebug的使用》http://www.tech-q.cn/thread-686-1-2.html 和《34条网站加速方法》http://www.tech-q.cn/thread-680-1-2.html所讲的进行优化。其中主要包括:
a) 将最终页用DIV+CSS进行重构,合理的设置有效期,加快客户端下载和浏览器DOM引擎渲染和呈现的速度。
b) 因为平台用了JQUERY库,直接引用GOOGLE上的JS文件,减少传输字节和连接数,提高访问速度。
c) 将JS和CSS进行压缩,和图片动画文件放到单独的域名下,如http://images.xxx.com, 因为老的浏览器针对一个域名限制了2个并发连接,采用这个方法可以解决,注意在这个域名下设置有效期。
d) 关闭不必要的ASP.NET中的VIEWSTATE,减少传输字节。

(二) 平台系统优化
通过最多的10条SQL语句和执行时间比较长的SQL语句中发现,很多都是因为文章页最终页和帖子最终页更新访问次数这种类似的更新引起的,起先是想加一台服务器来做SQL SERVER的镜像分发,插入、更新、删除全在一台上操作,另外一台机器只能做查询操作。

但是这样增加的服务器只能做数据库服务器,并且系统上更改比较大,不是最好的方案。经过考虑,既然是更新的数据操作不需要实时,那么加一台服务器用CENTOS 5.x,装上memcached,做增量更新,而且那台服务器剩下的资源可以做其他事情,实现思路是先更新到memcached中,如果发现更新数达到一个阙值了,一次性更新到数据库。平台的会员在线状态,从数据库也更改到了memcached中。

为了提高DAO层的性能,我建议他们的开发使用NHIBERNATE这个成熟的数据库应用框架,使用了数据库连接池,提高数据库连接的重用性。

其中执行时间比较长的SQL语句是因为模糊查询引起的,这时候增加的服务器就又用到了,在上面装上了 lucene,将数据库的需要查询的资料,提交到lucene中,搜索全部放到lucene中去做,具体的这里就不追溯了,有兴趣的可以在这里http://www.tech-q.cn/forum-19-1.html 找到相关资料。

经过第二步改造,性能提升到一个新的阶段。无法访问,访问出错或访问缓慢的情况已经很少出现了。
但是优化时无止境的,而且目前的情况只适合目前这个访问情况,等访问量再增加到现在的几倍后,还会出现问题,所以我准备下一步优化。

第三步 架构优化
在这里,我将新上的服务器再次利用上,安装了SQUID缓存服务器,经过调优后再次提高负载能力,并在SQUID前面安装了NGINX,充分利用NGINX的使用EPOLL特性,并把前面设置的http://images.xxx.com/移动到nginx下面。其中NGINX,SQUID,MEMCACHED安装配置的过程就不赘述了,http://www.tech-q.cn/forum-10-1.html这边有很多,也可以加QQ群:4656272,来讨论。

其他
在分析日志的过程中,发现很多访问时由于搜索引擎的蜘蛛产生的,而由于此平台的文章最终页没有静态化,所以引起了很多不必要的数据库连接。我采取了以下方法:
1 合理的设置robots.txt,对于未知的或者不受欢迎的蜘蛛,在nginx中根据其agent直接rewrite到一个静态页面。
2 根据请求,生成静态页生成HTML。

至此此平台的性能有了明显提升,无法访问,访问出错或访问缓慢的情况再也没出现过。

Asp.net平台下网站性能调优的实战方案(转)的更多相关文章

  1. [网站性能2]Asp.net平台下网站性能调优的实战方案

    文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言    最近帮朋友运营的平台进行了性能调优,效果还不错, ...

  2. Java生鲜电商平台-API请求性能调优与性能监控

    Java生鲜电商平台-API请求性能调优与性能监控 背景 在做性能分析时,API的执行时间是一个显著的指标,这里使用SpringBoot AOP的方式,通过对接口添加简单注解的方式来打印API的执行时 ...

  3. JVM性能调优与实战进阶篇-上

    ZGC 诞生原因 Java生态非常强大,但还不够,有些场景仍处于劣势,而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场.比如 谷歌主导的Android手机系统显示卡顿. 证券交易市场,实 ...

  4. 网站性能调优实战-学相伴KuangStudy

    面对并发我们是如何优化KuangStudy网站性能的? 每个项目都会随着用户和数据的增长调整架构,来面对未来的问题,我们也不例外,在1月5号我们平台正式公测后,引起了很多观众的热烈反响,仅仅4天,注册 ...

  5. JVM性能调优与实战基础理论篇-上

    Java虚拟机 概述 Java官方文档 https://docs.oracle.com/en/java/index.html JVM是一种规范,通过Oracle Java 官方文档找到JVM的规范查阅 ...

  6. JVM性能调优与实战基础理论篇-中

    JVM内存模型 概述 我们所说的JVM内存模型是指运行时数据区,用New出来的对象放在堆中,如每个线程中局部变量放在栈或叫虚拟机栈中,下图左边区域部分为栈内存的结构.如main线程包含程序炯酸器.线程 ...

  7. JVM性能调优与实战基础理论篇-下

    JVM内存管理 JVM内存分配与回收策略 对象优先在Eden分配,如果Eden内存空间不足,就会发生Minor GC.虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在 ...

  8. IntelliJ IDEA 2019.2.2在16GB内存下的性能调优

    开发工具 IntelliJ IDEA 2019.2.2 x64 idea64.exe.vmoptions -m -m -XX:ReservedCodeCacheSize=m -XX:+UseConcM ...

  9. 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写

    摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...

随机推荐

  1. oracle中临时表是用来做什么的

    oracle中临时表是用来做什么的 某些情况下, 需要 多个非常大的表关联的情况下, 但是需要检索的, 是少量的数据的时候.可以先把 大表的数据, 检索出那一小部分, 然后插入到 临时表中, 最后再关 ...

  2. easyUI和bootstrap的混搭

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. PHP中的全局变量global和$GLOBALS的区别

    1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量,函数体 ...

  4. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  5. 常见ES5方法

    • ES5 JSON扩展JSON.parseJSON.stringify • ES5 Object扩展Object.createObject.keys • Date对象Date.now • ES5 F ...

  6. JQuery radio(单选按钮)操作方法汇总

    这篇文章主要介绍了JQuery radio(单选按钮)操作方法汇总,本文讲解了获取选中值.设置选中值.根据Value值设置选中.删除Radio.遍历等内容,需要的朋友可以参考下   随着Jquery的 ...

  7. MySQL练习-employees数据库(二)

    department 部门表 dept_emp 部门员工任职期表(按部门&时期) dept_manager 部门经理任职期表(按时期) employees 员工详情表 salaries 员工薪 ...

  8. 数据库mysql 基本命令

    .....= =.... 进入mysql: mysql -uroot ; 创建一个数据库: create database [数据库名字]; (注意最后的分号不能漏) 删除一个数据库:drop dat ...

  9. HDU4411 最小费用流

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4411 floyd处理出最短路 每个点拆为i.i+n,i到i+n连一条容量为1,费用为负无穷的边,代表这个城 ...

  10. linux学习第一天,常用命令一

    linux系统基本原则:1.由自由的单一的小程序组成,组合小程序完成负责的任务.2.一切皆文件,3.尽量避免捕获用户接口,也就是说用户输入命令后就能直接返回结果.4.配置文件保存为纯文本格式. GUI ...