我有一个Web服务,间歇性地在服务器上使用高达100%的CPU。我们无法在开发服务器上复制它,它似乎只在生产中发生。我们认为这可能是一个负载问题,但我们一直在测试它,最多可以有10个人。在生产中,只有2人使用它,处于beta状态。我已经搜索了任何无限循环的代码,但没有。
经过大量的搜索后,我发现this页面表明字符串连接可能是个问题。有5个地方使用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使用率吗?如果它可能是原因,那么最好的替代方案是什么?
我很乐意对此进行一些监控,但事实是它可能每周发生一次,它只发生在实时服务器上,所以如果我花时间运行一些性能诊断,那么现在是时候了服务没有运行,我们的用户无法完成他们的工作。杀死进程并重新生成它会更快更简单。
有什么想法吗?
答案 0 :(得分:0)
此生产Web服务器是否只有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