我正在寻找能够以编程方式检查的指标,这些指标会暗示我的应用程序即将发生故障。我正在寻找一般性的东西,比如“免费IO线程的数量非常低”,“应用程序池可用的内存很低”,以及“处理器使用率很高”。
这适用于C#/ asp.net和IIS。
以编程方式检查值的示例很不错,但不是必需的。任何好的想法都欢迎。
答案 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)
也许不是程序性的,但保持一定的支持或加班时间,以防止它摔倒可能是一个很好的指标。 : - )