【问题标题】:Usage of Cpu and Outofmemory ExceptionCpu 的使用和内存不足异常
【发布时间】:2011-05-16 12:13:54
【问题描述】:

我们有一个基于 asp.net 1.1 的 Web 应用程序。我们将它部署在 Web 服务器上,但存在一个问题。 在网络服务器中,有时 cpu 使用率会增加到 100%,并且会发生内存不足异常。

我认为项目中有一些错误的代码,但我不知道它在哪里。

现在,我想听听你关于如何发现问题以及什么样的代码会增加 CPU 使用率的建议。

【问题讨论】:

  • 你对这个问题是认真的吗?增加 CPU 使用率的情况确实有无数种。因此,在您的位置,我将首先准确描述此应用程序在做什么,它是如何编码的,......当然,您提供的细节越多,就越有可能得到好的答案。
  • 也许你是对的。但是我在服务器中看到了一些有趣的东西。在系统抛出 OOM 异常之前,CPU 使用率变为 100%,事件视图中出现 id 为 1078 的事件日志,w3wp.exe 使用 1200 k 内存。
  • @mavera,这根本没有帮助。当您看到 CPU 使用率增加时,应用程序在做什么?访问数据库、解析 XML 文件、无限精度计算 PI、发射导弹……?
  • @Darin,感谢您的回复。在应用程序中,页面数以百计,有近2000个客户使用它。所以我找不到哪个页面或进程导致了这个问题。我想听听您关于寻找原因而不是解决方案的建议。
  • @mavera,当抛出异常时,它通常会附带一个堆栈跟踪,这可能会帮助您查明此异常在您的代码中产生的位置/方法。一旦你确定了它,你就会知道这个方法在做什么。

标签: asp.net performance out-of-memory cpu-usage


【解决方案1】:

看起来垃圾收集器由于某种原因没有按预期工作。我建议查看在长循环中有变量声明的代码。例如,您需要检查如下所示的循环:

dim c as car
for i as integer = 0 to 20
    c= new car
    c.brand=""
Next

上述循环会产生大量垃圾,因此请确保在使用完对象后调用dispose()

另一个要检查的问题是递归。如果您有递归调用,请确保检查中断条件是否正确,并确保在跳入下一个递归之前也调用dispose()

【讨论】:

  • 很抱歉,这个答案毫无帮助。内存不足的异常并不一定表示 GC 没有工作,搜索递归调用是浪费时间。您应该做的第一件事是分析错误,而不是猜测。
  • 我没有说 GC 不工作,我说它不能正常工作,因为糟糕的编程习惯可能是错误的原因。这是在代码中首先要查看的内容,可以节省大量时间进行分析。
  • 垃圾。分析错误并对其进行调试比随机扫描代码和猜测要好得多。分析问题的转储将很容易将您指向错误。你只需要付出一点努力。另外,因为我对你的答案投了反对票而对我的答案投了反对票,这绝对是可悲的。
  • 有不同的观点并不意味着我的方法是垃圾。请纠正你的话。这也不意味着你的正确。顺便说一句,投反对票的不是我。
【解决方案2】:

如果您不知道如何在部署后进行调试,那么您应该首先学习的是Tess Ferrandez's blog。点击,阅读。很多。 :) 我建议您从debugging labs 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多