我有一个 Windows Azure 应用程序(web 角色),它遇到了严重的问题。
如果应用程序连接到的某个数据库出现问题(在本例中为 SQL Azure 瞬时错误),应用程序就会抛出许多异常。抛出的每一个异常都会被捕获并妥善处理,但 IIS 服务最终会关闭,甚至更糟的是,整个 Web 角色都会失去响应。
异常数量很高,每秒有 30 到 100 个。
我的应用程序在 3 个 web 角色实例上顺利运行,当遇到此问题时,我已经升级到 10 个实例,因为我确信我读到捕获的异常会占用大量资源,但这并没有什么区别。
事件日志中没有错误或(据我所知)有用的警告。
.. 再重复一遍,我可以保证不会发生未捕获的异常。
这听起来像是正常的服务器行为吗?
答案1
如果你确信这是异常,那么 StackOverflow,但根据我的了解:不是直接的。只有未处理的异常才会导致进程直接终止。
但你描述的症状也不是那样的 - “IIS 服务最终关闭” - 你能具体说明一下是什么吗确切地你的意思就是这个吗?
异常可能会导致异常糟糕的性能,而 30-100/秒似乎是一个非常多的异常;如果它们在 GC 生成中幸存下来,它们可能只是分割了你的地址空间,但不会仍然徘徊(检查是否有内存泄漏?)
“或者更糟的是,整个 Web 角色变得无响应” - 您指的是 VM 实例?这听起来更像是未清理的资源泄漏(内存或外部资源)。
答案2
经过进一步调查,这不是由异常引起的,尽管大量的异常确实会影响性能,但这个问题只是导致异常的数据库问题也增加了每个请求的处理时间,请求的处理速度无法比它们进入的速度更快,这导致它们不断积累,直到 IIS 说“不再!503!!”