我有一个 Web 服务间歇性地使用服务器上高达 100% 的 CPU。我们无法在开发服务器上复制它,它似乎只发生在生产中。我们认为这可能是负载问题,但我们一直在一次最多 10 人的开发环境中对其进行测试。在生产中,只有 2 个人在使用它,处于 beta 状态。我已经搜索了任何无限循环的代码,但没有。
经过大量搜索后,我发现这个页面说字符串连接可能是问题所在。有 5 个地方使用了 a StringWriter
,我已StringBuilder
按照链接中的建议将其更改为。但是问题仍然存在,我想知道是否可能是DataTable.WriteXML
电话。基本上,Web 服务中的每个方法都会填写数据表并将数据作为 XML 返回,因为这是第三方所需的格式。电话都是这样的:
Dim SB As New StringBuilder
Dim SW As New IO.StringWriter(SB)
dsSource.Tables("Test").WriteXml(SW, Data.XmlWriteMode.IgnoreSchema, True)
这是低效的吗?这会导致 100% 的 CPU 使用率吗?如果这可能是原因,那么最好的替代方法是什么?
我很想对此进行一些监控,但事实上它可能每周发生一次,它只在实时服务器上,所以如果我花时间运行一些性能诊断,那么该服务是时候了t 运行,我们的用户无法完成他们的工作。终止进程并重新生成它更快更简单。
有任何想法吗?