在C#/ WCF应用程序中使用原因不明的CPU
我有一个麻烦的问题,我不知所措。简而言之,我的Web场中的Web服务器使用CPU的难度令人难以置信。在C#/ WCF应用程序中使用原因不明的CPU
我有大量的用户打两个前端Web服务器。 99%的页面加载是Ajax请求,并提供一个简单的JSON序列化对象,Web服务器使用WCF从后端检索。在典型的情况下(大概99%的请求),所有的ASPX页面都在做一个WCF调用来获取这些数据,并将其序列化为JSON字符串并返回。
该对象非常小 - 一个GUID,一对短字符串,几个整数。
非典型情况是初始页面加载,它执行相同的操作(WCF请求),但使用asp:literals将响应注入页面的不同部分。
所有三台机器(2个Web服务器,一个后端)具有相同的硬件规格。我期望后端在这种情况下完成大部分工作,因为它管理所有数据,执行查找等。但是:后端的负载是,比前端的负载低。后端是一个很好的,级别10-20%的CPU负载。前端平均运行时间为30%,但它们全都在地图上,有时会在10秒内达到100%的峰值,并且需要600毫秒才能为这些非常简单的页面提供服务。
当我在profiler(ANTS)中运行前端时,它将WCF通信标记为占用80%的CPU时间。这是.NET生成的WCF代理的整个调用。
WCF设置:服务完全平行。我已将实例设置为“单个”,并发设置为“多个”。我将服务上的maxConnections和listenBacklog打开到256.在紧张的情况下(500个请求/秒),我看到两个前端服务器和服务之间打开了大约75个连接,所以它没有打到墙上。我的安全性设置为“无”。带宽使用率约为潜在的1/20(100Mb/s网络为4Mb/s)。
在客户端(Web服务器)上,我为该服务创建了一个静态ChannelFactory。代码来调用服务的样子:
service = MyChannelFactory.CreateChannel();
try {
service.Call();
service.Close();
} catch {
service.Abort();
}
(简化,但你得到的基本图片)
我不明白的是,其中在前端所有这些负载是从哪里来的。奇怪的是,它从来不在30%-90%的范围内。它处于恐慌模式(100%)或正常(30%或更少)。但是,考虑到后端的负载,我预计这两台机器都会达到10%或更低。内存使用,句柄等等,都显得合理。
要添加一个皱纹:当我记录在后端服务这些调用需要多长时间时,我得到的时间始终小于15ms(可能每分钟有一个或两个尖峰到30ms)。在前端,这些调用可能需要1秒才能返回。我想这可能是因为CPU的问题,但它似乎对我来说。
所以......有没有人有什么想法在哪里看这种事情?我正在探索一些事情。
澄清:WCF服务托管在Windows服务中,并且正在使用netTcp绑定。另外,我将客户端上的maxConnections设置为128,FWIW。
很难说可能会发生什么,但一个疯狂的猜测是某件事正在引发一个争用点和它的旋转(而不是等待)。
有没有机会增加前端服务器中后端服务器的HTTP连接数量?你可以做到through the config file。我在WCF客户端看到的一个常见问题是,限制保留为默认值2,这严重限制了客户端代理级别的并发性。
对 - 我有这样的印象:它正在忙着等待什么,但我无法弄清楚什么。看起来,如果需要的话,它仍然有空间建立更多的服务连接。 稍微详细一点 - WCF服务作为Windows服务托管,而不是IIS的一部分。我有maxConnections设置为128绑定(顺便说一句,是netTcp)。 – Moxen 2010-01-26 02:05:05
这两件事情都没有关系。我所描述的问题与服务器无关(我同意你在那里做了正确的更改),但是在*客户端*上。 默认情况下(这是HTTP规范建议的),HttpWebRequest(WCF在内部使用)一次将连接到单个远程服务器的连接限制为2个并发HTTP连接。这意味着无论您的服务器设置如何,您的客户端可能会遇到争用。 – tomasr 2010-01-26 03:13:57
HttpWebRequest连接限制是否会影响netTcp绑定?我不认为这是发生的,因为我确实看到两台机器之间的数十个开放连接。在压力测试中,连接从零开始并最终工作。而套接字(根据netstat)绝对处于'ESTABLISHED'状态。 – Moxen 2010-01-26 15:52:14
@Moxen:找出问题所在? – LBushkin 2010-04-23 19:38:57
我们也有一个NetTCP WCF服务托管在Windows服务中,这种行为在移到.NET后突然显示出来4 您有任何更新吗?我们正在考虑转向基于IIS/ASP.NET,但我不相信它会解决这个问题。 – Jaans 2013-02-13 03:45:33