我们建立的网站出现了性能问题,但我不太清楚如何开始诊断它。
简短描述是:我们有一个非常小的网站(http://hearablog.com) 流量很少,在糟糕的专用服务器中,CPU 总是很高,有时会持续几分钟保持在 100%,而 w3wp.exe 占用了大部分。典型的情况是 w3wp.exe 占用 60%,SQL Server 占用约 30%。我们的数据库也相当小。
详细描述和更多详细信息:
该网站托管在 Cari.Net 的一个非常糟糕的服务器上。从一开始我们就觉得服务器运行不太正常,就像有些事情需要太长时间一样,所以这可能是从一开始就存在的配置问题。可能也可能是我们得到的是虚拟服务器,而我们应该有一个专用服务器,尽管我们没有证据表明这一点,除了服务器往往很慢这一事实。
服务器是 Windows 2008 Standard 64 位,带有 SQL 2008 Express
硬件是 Celeron 2.80 GHz,1Gb RAM
该网站采用 ASP.Net MVC 开发,使用 Entity Framework 进行数据访问。
现在,这是相当糟糕的硬件,但我曾使用过其他服务器,这些服务器具有同等(或更差)的硬件,性能比这台好得多。也就是说,其他服务器有 W2003 和 SQL2005,而我使用的是 ASP.Net“WebForms”2.0,没有 MVC、没有 LINQ、没有 EF;所以我不确定升级到 2008/其他东西是否意味着预计会有很大的性能损失。
我经常提供 MP3 文件(5-20 Mb),负载有点不正常,也许这会导致某种问题?
这会导致 w3wp 占用大量 CPU 吗?磁盘使用率似乎很低。内存通常约为 90%,但磁盘使用率似乎表明分页并不多。
我明白了吨每天都会收到有关 SQL 超时(查询耗时超过 30 秒)的电子邮件,尽管我们所有的查询都非常简单(或者应该是,但 EF 可能搞砸了)。
这是资源监视器在 100% CPU 的“冲刺”之一中的样子,希望那里有任何有用的东西。
以下是一些性能计数器的快照:
现在,让我非常困惑的是 w3wp 的 CPU 使用率太高了。它实际上不应该做太多事情...所以我的问题是...
- 有什么方法可以找出它在做什么吗?甚至可以分析一下它?
- 我应该查看哪些性能计数器?
- 在这种硬件/软件配置下,这是可以预料到的吗?
- 这是否可能是由某种配置失败引起的,您应该从哪里开始查找?
非常感谢。Daniel
Magliola
答案1
您还可以使用 IIS 管理器中的工作进程 UI 并检查当前正在执行的请求,并查看它们是否卡在了哪里。打开 IIS 管理器->单击树中的服务器->双击工作进程图标->双击正在消耗 CPU 的工作进程以实时查看当前正在执行的请求,这样您就可以看到哪个模块正在耗时。
还可以考虑使用失败请求跟踪来跟踪每个请求的时间,以查看它们在哪里花费了很长时间。
答案2
好吧,首先——服务器确实很差劲。但应该够用了。
对于虚拟化,请检查您的驱动程序。我知道没有隐藏 CPU 的虚拟化平台(我怀疑有人在赛扬上安装了 hyper-v 或 esx),但磁盘等驱动程序可以作为参考。
CPU 不应该那么高。遗憾的是,有了这些 RAM,您就完蛋了 - 如果您开始添加分析器,那么您的内存就会被耗尽。
我会:
- 检查日志中此刻正在执行的内容。
- 将操作系统升级到 2008 R2 - 那里有更多信息可用。
供测试用:
- 在您的开发环境中复制该网站并运行一些性能测试。
- 在那里进行分析。
- 使用失败请求跟踪来找出哪些请求失败了。
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
那里有一些开始。如果问题更 - 嗯 - “可分类”,这可能会给你一个提示。
我还会保留长期性能日志。注意您的 IO(每秒读取时间、每秒写入时间几乎是唯一相关的)。其余的都是 IO 方面的内容,太模糊了 - 但是一旦您的 IO 开始花费比应有的时间更长的时间,磁盘就会落后。
我现在会排除配置问题 - 至少作为主要指标。有些东西耗尽了你的 W3p 资源,现在你需要找出它是什么。
总的来说,这不是我想要的物理服务器 - 它太小了,在我看来,在那里放一台机器是没有意义的。虚拟的会更好 ;)
答案3
您可以尝试使用一个名为进程探索器监视在 w3wp 进程下运行的单个线程。它应该允许您查看哪个线程导致了所有损坏。
答案4
使用 Perfmon 的“进程”计数器查看 w3wp.exe 进程的各个属性。工作进程的 CPU 时间中有多少是内核时间?内核时间过长可能表示存在分页,但您说您不相信。其他可能性是驱动程序有问题。工作进程有 23 个活动线程,这很好,但它们在做什么?尝试使用 SysInternals 的 ProcessExplorer 进行进一步挖掘;您还可以查看正在使用的 TCP/IP 连接。我没有使用过 SQL Express,但它是否像它的大哥一样具有内存调整参数。SQL 是否会导致 IIS 内存不足,从而导致过度分页?