我的问题是关于简单测试网站的性能。
为了测试性能,我使用jMeter来模拟此页面上的75个用户(连续)。 该页面仅对GetHello()进行Web服务调用并打印结果。
webservice方法做得不多:
public string GetHello(){
int count = 0;
foreach(int i = 0; i < 10000000; i++){
count++;
}
return "hello world "+ count;
}
但是在性能结果中,我看到平均加载时间越来越高......这对我来说似乎不合逻辑。我不知道在哪里解决这个问题。
网站服务器(2个四核处理器2.33Ghz,8G内存)内存和CPU不忙,webservice服务器(与网站服务器硬件设置相同)内存不忙但CPU使用率介于两者之间60%和100%...
我想到的是IIS设置问题或web.config配置(对于网站或webservice)但我找不到任何解决方案......或解释为什么会发生这种情况。 这种简单的代码永远不应该成为我眼中的问题吗?
更新: 当我从webservice中删除循环时......看起来没有任何问题。因此,一旦webservice方法需要一点计算,平均处理时间就会增加。
更新2
案例性能下降
我们的网站遇到了性能问题。 我们已经设置了一个测试环境来确定问题发生的位置。 测试环境由3台服务器组成。 (2为前端(网站)en 1为后端(wcf webservices))。 服务器的规格:
webservices正在使用net.tcp端点 使用Jmeter,我们在网站1上向网页发送了75个并发请求。 响应时间在5秒内持续增加,然后趋于平稳。 当我们使用浏览器访问网站1时,网站的响应时间很长。 当我们去网站2,同一页面时,网站很快。 使用netstat -t,我们可以看到网站1只有大约30个连接到Web服务。 网站上web.config中的端点绑定如下:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<bindings>
<netTcpBinding>
<binding name="netTCPBinding" maxReceivedMessageSize="999999999" sendTimeout="00:03:00" closeTimeout="00:03:00" receiveTimeout="00:03:00" maxConnections="65355">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None"></security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://192.168.1.124:21130/ContentService.svc" binding="netTcpBinding" bindingConfiguration="netTCPBinding" contract="ContentWS.IContentService" name="Default1">
</endpoint>
<endpoint address="net.tcp://192.168.1.124:21131/Service.svc" binding="netTcpBinding" bindingConfiguration="netTCPBinding" contract="PrijsvrijWS.IService" name="Default">
</endpoint>
</client>
</system.serviceModel>
这是webservice的配置:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTCPBinding" maxReceivedMessageSize="999999999" sendTimeout="00:03:00" closeTimeout="00:03:00" receiveTimeout="00:03:00" maxConnections="65355">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None"></security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ajaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="serviceWithMetadata">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="100" maxConcurrentInstances="100" maxConcurrentSessions="100" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
<services>
<service behaviorConfiguration="serviceWithMetadata" name="WcfService.Service">
<endpoint address="net.tcp://localhost:21131/Service.svc" binding="netTcpBinding" bindingConfiguration="netTCPBinding" name="Default" contract="WcfService.IService" />
</service>
<service behaviorConfiguration="serviceWithMetadata" name="WcfService.ContentService">
<endpoint address="net.tcp://localhost:21130/ContentService.svc" binding="netTcpBinding" bindingConfiguration="netTCPBinding" name="Default" contract="WcfService.IContentService" />
</service>
</services>
</system.serviceModel>
我们尝试过servicethrottling,但它似乎没有效果。 在测试期间,服务器上的CPU使用情况如下:
我们是在网站1的最大值上运行还是缺少某些设置?
答案 0 :(得分:0)
你检查过JMeter JVM的健康吗?有时JVM GC可能是我们忽略的高响应的原因。