简单的webservice表现不佳

时间:2014-02-03 15:54:18

标签: asp.net performance web-services jmeter

我的问题是关于简单测试网站的性能。

为了测试性能,我使用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))。 服务器的规格:

  • 网站1:Intel Xeon e5410(2x)8GB ram
  • 网站2:Intel Xeon x3323 4GB ram
  • Webservice:Intel Xeon e5410(2x)8GB ram

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:约60%,最高90%
  • 网站2:1%
  • 网络服务:约25%,最高50%

我们是在网站1的最大值上运行还是缺少某些设置?

1 个答案:

答案 0 :(得分:0)

你检查过JMeter JVM的健康吗?有时JVM GC可能是我们忽略的高响应的原因。