0

我有一个 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 运行,我们的用户无法完成他们的工作。终止进程并重新生成它更快更简单。

有任何想法吗?

4

1 回答 1

0

这个生产网络服务器是否只有 1 个 CPU?我问是因为 WriteXML 与任何同步/单线程代码一样,将使用 100% 的单个 CPU。如果服务器有多个 CPU,并且它跳到 100 并停留一段时间,这可能是另外一回事。看看像多线程(运行太多)或自己清理之后的东西,IE;

SW.flush
SW.Close
SW = Nothing

或者把它放在一个 USING 块中

USING SW As New IO.StringWriter(SB)
'Your code here
END USING
于 2013-09-18T14:29:14.353 回答