即将失败的暗示

时间:2010-06-24 16:46:42

标签: c# asp.net iis detection

我正在寻找能够以编程方式检查的指标,这些指标会暗示我的应用程序即将发生故障。我正在寻找一般性的东西,比如“免费IO线程的数量非常低”,“应用程序池可用的内存很低”,以及“处理器使用率很高”。

这适用于C#/ asp.net和IIS。

以编程方式检查值的示例很不错,但不是必需的。任何的想法都欢迎。

5 个答案:

答案 0 :(得分:2)

您可以以编程方式访问某些内置系统性能计数器的值。如果您需要更具体的细节,您也可以构建自己的计数器进行查询。

这是一篇可以帮助您入门的文章:How to calculate CPU usage programmatically

答案 1 :(得分:2)

我的想法:

确定您的webapp的性能输入和输出。

  • 输入(用户数量,用户正在执行的任务,时间等)
  • 输出(内存使用,线程,滞后)

根据实际请求数据分析您的应用程序。 构建一个很好的输入表及其相关输出。 例如:

4 users calling page1 -> costs 4   - 6   mb, 4 threads
5 users calling page1 -> costs 7   - 14  mb, 5 threads
2 users calling page2 -> costs 120 - 200 mb, 1 thread

查找经常导致失败的输出并找出导致这些输出的输入。建立一个不错的max-likelyhood model失败。

当您的输入开始接近您的故障输出时,即将发生的故障很可能是有可能的。记录故障何时发生和不发生,并将此信息反馈到您的表中。您的webapp将在即将失败时了解。

响应评论更新:

查找输出是最简单的部分。

参见SO问题How to get memory used in c#How to get the cpu usage in C#以及更一般的问题What key performance monitors should I watch for asp.net application

这些问题的关键点:

  • GC.GetTotalMemory - 告诉您垃圾收集器分配了多少。

  • Processor Object - 告诉你cpu上有各种有趣的性能统计数据(cpu idle time,usauge等)。

答案 2 :(得分:2)

几年前,我确实找到了一份工作。事实证明,这是一项非常非常困难的任务 - 如今,您甚至无法信任操作系统,因此在.net沙箱中运行将几乎无法确定实际发生的情况。

如果您决定继续这样做,可能需要考虑以下几个简单的情况。

CPU - 您可以确定当前的CPU使用率,但是如何判断您的特定实例是否已绑定到一个CPU?您如何确定您是在群集中运行,还是其他内核可能在做什么?您可能在CPU或线程受限的虚拟机内运行 - 这些限制可能会在运行中更改。

内存 - 如果您在虚拟化实例中运行该怎么办?如果突然进行外部更改以增加或减少可用内存量会怎样?

答案 3 :(得分:0)

听起来你对失败的外部原因更感兴趣,而不是应用程序因其自身的优点而失败。我想你在这里尝试从事一项系统工作;而不是试图猜测可能的失败因素,而是专注于配置工作进程以缓解任何这些问题。 IIS工作进程具有很强的恢复能力 - 请查看ping,回收等功能。

答案 4 :(得分:0)

也许不是程序性的,但保持一定的支持或加班时间,以防止它摔倒可能是一个很好的指标。 : - )