【问题标题】:Weird issue with spiking cpu on w3wp process在 w3wp 进程中尖峰 cpu 的奇怪问题
【发布时间】:2011-01-19 03:24:26
【问题描述】:

我遇到了最奇怪的问题...我有一个单轨网站(一个 .NET 解决方案,类似于 ASP.NET MVC)...并且其中一个页面上有一个保存按钮。单击保存按钮时,它会执行一些代码将对象保存到数据库,然后重定向到另一个页面。但是,它所做的是在您单击保存按钮后立即执行所有保存代码,然后它会在那里停留一段时间,然后重定向到另一个页面并执行其代码。以下是一些让情况变得特别奇怪的事实。

  1. 每次您完成单击保存并等待其完成和重定向的过程时,都比您上次尝试的时间长 2-4 秒。所以第一次需要 2 秒,然后可能需要 5 秒,然后是 8 秒……
  2. 如果您回收应用程序池,它会使其再次快速运行,但事实 #1 开始发挥作用,您执行的次数越多,它就会越慢。
  3. 我添加了日志,它在1毫秒内执行保存和重定向代码,然后等待一段时间,然后快速执行新页面的代码。
  4. 我尝试将其更改为重定向到 google.com,但它的行为仍然如此。
  5. 我尝试让它根本不重定向,只是在保存后再次提供现有页面,它仍然以这种方式运行。
  6. 每次单击保存时,CPU 都会出现峰值(特别是 w3wp 进程)。
  7. 其他页面的行为方式并非如此,即使是其他保存方法。
  8. 注释掉保存到数据库的代码可以使其正常工作,无需等待。

那么有没有人知道是什么原因造成的?保存代码使用 Active Record 和 NHibernate。代码本身运行速度非常快,就像我说的不到 1 毫秒,但似乎在代码完成执行后异步发生了一些事情,导致它挂了很长时间..

任何想法将不胜感激,代码位于http://pastebin.com/XGLAWPgK

【问题讨论】:

  • 我会尝试使用分析器来获取更多信息。
  • 也试试 NHProf 看看问题是否出在 NHibernate 上,或者至少启动 NH 日志并检查日志。
  • NHProf 似乎没有显示任何有用的东西。它显示了我的更新语句,然后显示了提交事务(两者都非常快),然后 35 秒没有任何内容,然后显示“开始事务与隔离级别:未指定”,然后它开始选择重定向到页面上的数据。
  • 我升级了所有的 castle 和 nhibernate dll,这似乎解决了这个问题。很奇怪……

标签: c# nhibernate iis activerecord w3wp


【解决方案1】:

我的单轨电车有点生锈了……

您是在每次请求后处理 ActiveRecord/nHibernate 上下文还是将其缓存在会话状态中?您应该为每个请求创建一个新的上下文。

您是否渴望加载数据实体?如果您正在保存数据,它可能会获取所有关联的实体。

【讨论】:

  • 我没有看到任何可以手动缓存或处理上下文的代码,是否有某个地方的设置?我的数据访问类是静态的,因为它们使用 ActiveRecordMediator 方法,这些方法是静态的 - 这可能是问题吗?。
  • 对象的所有子对象都设置为延迟加载,而且我使用 Save 保存,而不是 SaveAndFlush,所以我不知道为什么它会在之后获取关联的实体。即使是这样,它也不应该使 CPU 达到峰值或执行时间过长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2017-07-22
相关资源
最近更新 更多