Asp.net平台下网站性能调优的实战方案(转)
转载地址: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平台下网站性能调优的实战方案(转)的更多相关文章
- [网站性能2]Asp.net平台下网站性能调优的实战方案
文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错, ...
- Java生鲜电商平台-API请求性能调优与性能监控
Java生鲜电商平台-API请求性能调优与性能监控 背景 在做性能分析时,API的执行时间是一个显著的指标,这里使用SpringBoot AOP的方式,通过对接口添加简单注解的方式来打印API的执行时 ...
- JVM性能调优与实战进阶篇-上
ZGC 诞生原因 Java生态非常强大,但还不够,有些场景仍处于劣势,而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场.比如 谷歌主导的Android手机系统显示卡顿. 证券交易市场,实 ...
- 网站性能调优实战-学相伴KuangStudy
面对并发我们是如何优化KuangStudy网站性能的? 每个项目都会随着用户和数据的增长调整架构,来面对未来的问题,我们也不例外,在1月5号我们平台正式公测后,引起了很多观众的热烈反响,仅仅4天,注册 ...
- JVM性能调优与实战基础理论篇-上
Java虚拟机 概述 Java官方文档 https://docs.oracle.com/en/java/index.html JVM是一种规范,通过Oracle Java 官方文档找到JVM的规范查阅 ...
- JVM性能调优与实战基础理论篇-中
JVM内存模型 概述 我们所说的JVM内存模型是指运行时数据区,用New出来的对象放在堆中,如每个线程中局部变量放在栈或叫虚拟机栈中,下图左边区域部分为栈内存的结构.如main线程包含程序炯酸器.线程 ...
- JVM性能调优与实战基础理论篇-下
JVM内存管理 JVM内存分配与回收策略 对象优先在Eden分配,如果Eden内存空间不足,就会发生Minor GC.虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在 ...
- IntelliJ IDEA 2019.2.2在16GB内存下的性能调优
开发工具 IntelliJ IDEA 2019.2.2 x64 idea64.exe.vmoptions -m -m -XX:ReservedCodeCacheSize=m -XX:+UseConcM ...
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...
随机推荐
- 三、基于hadoop的nginx访问日志分析--计算时刻pv
代码: # cat pv_hour.py #!/usr/bin/env python # coding=utf-8 from mrjob.job import MRJob from nginx_acc ...
- win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法
如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...
- Java学习笔记(未完待续)
变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...
- linux下, 再次遇到使用thinkphp的模板标签时,报错used undefined function \Think\Template\simplexml_load_string() 是因为没有安装 php-xml包
linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...
- [译]C#编码约定
原文:https://msdn.microsoft.com/en-us/library/ff926074.aspx 编码约定的目的是: 创建统一格式的代码,让读者的注意力更集中在内容上面,而不是结构 ...
- manacher算法专题
一.模板 算法解析:http://www.felix021.com/blog/read.php?2040 *主要用来解决一个字符串中最长回文串的长度,在O(n)时间内,线性复杂度下,求出以每个字符串为 ...
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- User space 与 Kernel space
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User spa ...
- MySQL 备份与恢复
一.备份/恢复策略 考虑因素有: (A) 表的存储引擎是否事务性的,在数据一致性方面不太一样. (B) 确定是全备份还是增量备份, (C) 考虑采取复制的方法做异地备份,复制不能代替备份 (D) 定期 ...
- JavaScript 常用正则表达式
==========================正则表达式=========================== 常用元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划 ...