使用IronPython检测ASP.NET程序状况(下)
在上一篇文章中,我们在一个请求中执行了IronPython代码,通过这个方法我们可以轻松地的检查系 统运行的状态,或对系统进行一些简单修改。但是这种做法只能检查系统在当前时刻的状态,在很多情况 下,我们需要对系统的请求进行一段时间的采样。对于简单的数据(例如每秒执行的请求数量,请求时间 ),我们可以通过查看Performance Monitor中相关的计数器来获得一些概要的数据。但是,如果我们需 要获取一些系统的详细状态,甚至是需要根据需要进行动态改变的自定义需求,则势必要深入到系统内部 进行数据采集。因此,我们可能需要让代码执行“一段时间”,并将直接结果进行汇总输出。 让代码执行一段时间不难,简单地使用Thread.Sleep便可,也不会造成什么性能或吞吐量上的损失。 关键就在于,在代码停留的这“一段时间”内,我们使用什么样的做法来采集数据。这时候,老赵脑海中 立即浮现出的便是HttpModule般监听请求管道(Pipeline)中的各式事件。于是立马写出以下的代码(在 前文的示例基础上进行修改):
再编译了IronPython代码之后,我们会设法获取其中的traceRequest和endTraceRequests函数,前者 用于“记录每个请求”,而后者用于采样最后的“聚合”。此外,还会设法从代码中获取等待时间 waitTime。然后,使用TraceRequest方法开始对当前请求进行采样。具体做法为监听当前Application的 BeginRequest事件,并在每次获得请求时调用traceRequest委托进行“记录”。在等待时间过后,自然将 委托从BeginRequest事件中剥离。最后,再通过endTraceRequests函数进行聚合输出。 代码逻辑很清晰,但可惜的是,上面这段代码不能生效。具体原因不明,可能是ASP.NET对这方面进行 了限制,使得我们无法在HttpModule之外为请求管道动态添加事件 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |