随笔分类 - 高性能web
摘要:最近有个项目用loadrunner做了压力测试,发现并发量还不到200服务器就支撑不住了。boss那边紧急开会,说此项目最近3个月内将有100家中大型公司用于校园招聘工作,如果这个问题不解决公司有可能玩完。于是紧急动员,当晚重启压力测试,力争把问题解决。由于之前测试部门做压力测试的时候我不在场,所以今天测试的时候先让他们演示的一遍,当loadrunner跑到100的时候,问题出来了,网站访问开始变慢,计数器webservice/current connections急剧上升,直到1000左右,这是访问网站报503错误。这一次我只是为了看下现象,我和小伙伴们都没有做任何处理。在再次开启loadr
阅读全文
摘要:记录我的windbg调试之旅。问题描述:有个项目cpu跳的厉害,马上请出windbg1. adplus 抓包;2. windbg打开文件,运行 .load sos ;3. 运行 !threads, 发现进程 71 和 77 有异常,gc这项为disabled;4. ~71s 切换到 该线程, !clrstack 查看托管代码,看看是哪个页面,看到页面是 imei_list.aspx;5. !dso,发现有个string报告如下错误:0:071> !dsoOS Thread Id: 0x11ec (71)ESP/REG Object Name1d1af0d4 156bd9e8 System
阅读全文
摘要:数据库部分:1)dnt_getattachmentlistbypid (效果明显)2)dnt_getindexforumlist (不太明显)3)dnt_getpostlist1 (不太明显)4)dnt_deleteonlineusers (效果明显)5)dnt_updateuseronlinestates (效果明显)6)dnt_gettoptopiclist(效果明显)文件部分:修改 BasePage .cs更新在线用户信息的时候添加这个条件,if (pagename.IndexOf("avatar.aspx", StringComparison.OrdinalIgno
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座。你没看错标题,的确是在线人数和Regex.IsMatch()引发的hang。事情是这样的,就在今天我们的论坛出现的挂起问题,当时刚好赶上了抓dump文件。于是就有了今天这篇文章。我们先用windbg看看论坛当时在干什么吧。1. 打开文件,运行 .load sos, 因为是hang,所以当然是要运行 !syncblk , 下面是运行结果:0:000> .load sos0:000> !syncblkIndex SyncBlock MonitorHeld Recursion Owning
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座。在本系列的第(4)篇中,我们提到过windbg,上次没能华丽登场的他,今天终于要一展才华了。解决问题是windbg与生俱来的功夫,他今天将怎么样来解决我们的问题,静听分解。经过第(4)篇的优化之后,我们的论坛迎来了每日100万pv的突破性指标,相对于我们其他项目来说,这个量虽然不值一提,但毕竟这个项目是一切从0开始,能达到这个量也算是一个小突破,值得小庆祝一下。不过问题也随之而来了。我们的iis服务器的cpu占用率从之前的约30%,上升到了80%,按照我们的经验,这是不合理的,80%已经是一个危险
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.经过前面的几次优化之后我们的论坛终于稳定了一段时间,大概半年之后我们的论坛迎来了每天大约50万的pv,这时候论坛有开始出现了问题。症状是这样的:管理员发现,网站经常会打不开, 但是也不报错,好像永远一直在打开,直到浏览器认为它打不开了,这样的症状每天会出现几次,而且越来越频繁。每次发生这样的情况过后一般iis的事件查看器都会asp.net有死锁提示,于是我知道,我终于遇上传说中的死锁了,每次有死锁迹象的时候我都跟踪了一下sqlserver,发现数据库是正常的,那看来就是asp.net这边的问题了。
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.在前两篇已经对看帖,发帖回帖做了优化,做过优化之后论坛访问起来果然顺畅多了。随着论坛帖子数的不断增加,论坛出现了一个新的问题,管理员在删帖的时候经常报错,超时,删除失败。由于有了之前的两次经验,现在找起问题来比之前要快多了,现在先找到删帖的存储过程dnt_deletetopicbytidlist3,脚本如下:ALTERPROCEDURE[dnt_deletetopicbytidlist3]@tidlistASVARCHAR(2000),@chanagepostsASBITASDECLARE@pos
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.上次对DiscuzNT的看帖做了性能优化,这次主要针对发帖和回帖做下优化,本文还是以优化数据库为主,C#的优化以后有时间另外记录。看帖,发帖,回帖 都是一个论坛的基本操作,如果性能不好导致这些操作变慢,论坛的效果可想而知了,那我们来看看DiscuzNT发帖和回帖都有些什么操作,性能如何。做事情总要有个先后,我给这次的优化工作也做了个步骤:(有图有真相)1)看代码,查到发帖回帖调用的存储过程;发帖调用了两个过程,代码如下:publicintCreateTopic(TopicInfotopicInfo
阅读全文
摘要:很多人都遇到过这样的情况,当网站达到一定的访问量,数据库就会成为瓶颈,进而引起阻塞。有人认为这可能就是硬件的极限了,于是想办法增加硬件设备。而我本人认为问题的元凶可能是性能不高的sql脚本,引起了阻塞。如果你和我有相同的看法,那我们就一起想办法找出问题的源头。案例1.某一天我被告知,我们的书城网站不能访问了,我马上查看,发现书城的有两台iis服务器均显示service unavailable,我初步断定是sqlserver数据库发生了阻塞,因为同一套程序使两台iis服务器同时当机的可能性不大。要知道是否发生了阻塞,当然要看master库的sysprocess表,看看是否有什么进程堵住了别的进程
阅读全文
摘要:注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.去年用DiscuzNT3.0做过二次开发,做过一些性能优化,但是时间关系一直没机会写下来;趁着5.1长假,来写篇回忆性的随笔吧。之前看过园子里代震军同学的博客,知道了老代同学是DiscuzNT团队的一员,从他的博文学了不少东西 ,我这里写的博文是针对一些问题提出自己的看发和解决方案,针对问题并无针对任何人之意,秉着技术交流的原则。DiscuzNT给我的印象是1)功能很强大,所有你能想到的基本都已经有了;2)性能有待优化,数据量较大的情况会产生性能瓶颈(这也正是写此文的目的)。之前发的博文由于缺乏经
阅读全文
摘要:1. int.Parse() VS int.TryParse()你是不是正在这样写[代码]4如果是可以这样试试[代码]3前一种写法,一旦 Request["id"] 是非数值型的,将引发一个异常,引发异常的开销是非常巨大的,而后一种则不会引发任何异常。2.string.IndexOf()你正在这样写吗?[代码]intpos=s.IndexOf(",");其实对于单字符的查找,这样写会更好[代码]i...
阅读全文
摘要:这是这两天刚刚发现的问题,记下来,希望对被web性能困扰的同仁有所帮助!下面说说网站的环境和状况吧:环境:win2003 + asp.net + sqlserver2000, 一个在线读书项目,日PV超500万,独立IP超3万状况:1)内存占用218M平稳;2)cpu约占5%,但是每隔20秒会突然冲到30%,有时甚至50%;(这个很重要)3)每次重新更新发布程序,cpu会稳定占5%一段时间(约30...
阅读全文