仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 864|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET编程:从ASP.NET线程角度对“玄色30秒”成绩的全新剖析仓酷云

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情!在这篇博文中,我们抛开对阿里云的嫌疑,完整从ASP.NET的角度举行剖析,看能不克不及找到针对成绩征象的更公道的注释。
“玄色30秒”成绩征象的次要特性是:列队的哀求(RequestsQueued)突增,抵达HTTP.SYS的哀求数(ArrivalRate)下落,QPS(Requests/Sec)下落,CPU损耗下落,CurrentConnections上升。
今天早晨18:08摆布产生了1次“玄色30秒”,恰好借此案例剖析一下。

1、为何RequestsQueued会突增?

最间接的缘故原由是ASP.NET没有可用的线程处置以后哀求。为何会没有可用的线程呢?ASP.NET可用的线程究竟是无限的,多是事先刹时的并发哀求太多,ASP.NET来不及创立充足的线程处置这些哀求。
我们来看一下ASP.NET中线程相干的设置——machine.config中的processModel(位于C:WindowsMicrosoft.NETFramework64v4.0.30319Config)。
有4个相干设置:maxWorkerThreads(默许值是20),maxIoThreads(默许值是20),minWorkerThreads(默许值是1),minIoThreads(默许值是1)。(这些设置是针对每一个CPU核)
我们用的就是默许设置,因为我们的Web服务器是8核的,因而实践的maxWorkerThreads是160,实践的maxIoThreads是160,实践的minWorkerThreads是8,实践的minIoThreads是8。
基于如许的设置,是否是假如刹时并发哀求是169,就会呈现列队?不是的,ASP.NET没这么傻!由于CLR1秒只能创立2个线程,等线程用完时才创立,黄花菜都凉了。我们推测ASP.NET只是依据这个设置往展望线程池中的可用线程是否是严重,是否是必要创立新的线程,和创立几线程。
那甚么情形下会呈现“玄色30秒”时代那样的大批哀求列队?假设并发哀求数平常是300,俄然某个刹时并发哀求数是600,超越了ASP.NET预估的所需的可用线程数,因而那些拿不到线程的哀求只能列队守候正在实行的哀求开释线程和CLR创立新的线程。跟着工夫的推移,开释出来的线程+新创立的线程足以处置这些列队的哀求,就恢复了一般。
那怎样考证这个推测呢?修正maxWorkerThreads,maxIoThreads,minWorkerThreads,minIoThreads的设置,让ASP.NET供应更多的可用线程,今朝我们接纳的设置以下:
  1. <processModelenable="true"requestQueueLimit="5000"maxWorkerThreads="100"maxIoThreads="100"minWorkerThreads="50"minIoThreads="50"/>
复制代码
假如接纳这个设置以后,“玄色30秒”征象几近不呈现,就可以考证成绩出在这个中央。如今主站www.ckuyun.com已利用了这个设置,必要察看一段工夫举行考证。
【启发】
1)经由过程Windows功能监督器监督ASP.NETRequestsQueued能够直不雅地评价ASP.NET使用程序的吞吐才能(throughput)。
2)经由过程ASP.NET异步编程(async/await)能够无效削减可用线程严重酿成的哀求列队成绩。
2、为何ArrivalRate会下落?

(上图中的橙色线条)
这是“玄色30秒”成绩中最使人不解的中央,ASP.NET中哀求再怎样列队,怎样会形成抵达HTTP.SYS的哀求数下落呢?一入手下手我们老是不信任是哀求分列引发的ArrivalRate下落,可是监督图中却铁证如山。
写这篇博客之前,我们俄然想通了!之前疏忽了一个中央——当你打这篇博文时,第1个哀求是html页面,假如这个哀求失掉一般呼应,扫瞄器在加载这个页面时会收回多个ajax哀求;假如第1个哀求被列队,扫瞄器处于守候形态,后续的ajax哀求就不会收回,如许抵达HTTP.SYS的哀求数就会下落。这也注释了为何偶然会在“玄色30秒”的两头阶段ArrivalRate会飙高,恰是由于事先被列队的哀求所对应的页面中有良多ajax,当它停止列队被实行后,后续的良多ajax哀求(大概列队的良多是如许的哀求)抵达了HTTP.SYS。
因而,我们信任了是哀求列队引发的ArrivalRate下落。
【启发】
不克不及把眼光范围于以后看到的成绩体现,而要综合思索,将诸多要素接洽起来理清各类征象之间的干系。
3、QPS下落

与ArrivalRate下落同理,QPS(Requests/Sec)与ArrivalRate是间接相干的,成反比干系。
因而,QPS下落也是由于哀求列队。
4、CPU损耗下落

也是同理,ArrivalRate与QPS下落,申明CPU要干的活少了,天然损耗就下落。
因而,CPU损耗下落也是由于哀求列队。
5、CurrentConnections上升

CurrentConnections是哀求列队的一个间接体现,哀求还没被实行,毗连固然会坚持着。
因而,CurrentConnection上升也是由于哀求列队。
6、看一个新目标RequestsExecuting

(上图绿色的线条暗示的是RequestsExecuting)
在哀求列队的时代,正在被ASP.NET实行的哀求数(RequestsExecuting)在增添,申明跟着被开释出来的线程增加和更多的新线程被创立,分列中的哀求正在被愈来愈多地实行。这从正面申明了实行中的线程多是一般的,没有被卡住。(接上去的IIS日记信息会进一步考证这一点)
因而,RequestsExecuting在增添也是由于哀求被列队,并且申明这个列队是一般的,没有哪一个中央卡住了。
7、再来看看IIS日记中哀求的time-taken

在“玄色30秒”阶段,IIS日记中没有time-taken凌驾1s的哀求!这申明了甚么?申明了正在被实行的哀求处置速率很快,没有甚么中央被卡住。。。除由于可用线程不敷,哀求被列队。
因而,IIS日记申明除哀求列队,其他中央统统一般。
【总结】
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着net网页编程嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。
活着的死人 该用户已被删除
沙发
发表于 2015-1-19 05:25:00 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
海妖 该用户已被删除
板凳
发表于 2015-1-31 21:39:45 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
若天明 该用户已被删除
地板
发表于 2015-2-3 08:38:47 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
变相怪杰 该用户已被删除
5#
发表于 2015-2-8 06:09:19 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
6#
发表于 2015-2-24 10:42:05 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
老尸 该用户已被删除
7#
发表于 2015-2-26 05:06:37 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
乐观 该用户已被删除
8#
发表于 2015-3-8 12:09:28 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-15 22:31:18 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
兰色精灵 该用户已被删除
10#
发表于 2015-3-22 17:11:35 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 02:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表