负载测试网站

时间:2012-12-10 16:57:25

标签: c# jmeter load-testing web-testing

我目前正在编写一个小应用程序来加载测试网站并遇到一些问题。

List<string> pageUrls = new List<string();
// NOT SHOWN ... populate the pageUrls with thousands of links

var parallelOptions = new System.Threading.Tasks.ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = 100;
System.Threading.Tasks.Parallel.ForEach(pageUrls, parallelOptions, pageUrl =>
{
    var startedOn = DateTime.UtcNow;

    var request = System.Net.HttpWebRequest.Create(pageUrl);

    var responseTimeBefore = DateTime.UtcNow;

    try
    {
        var response = (System.Net.HttpWebResponse)request.GetResponse();
        responseCode = response.StatusCode.ToString();
        response.Close();
    }
    catch (System.Net.WebException ex)
    {
        // NOT SHOWN ... write to the error log
    }

    var responseTimeAfter = DateTime.UtcNow;

    var responseDuration = responseTimeAfter - responseTimeBefore;

    // NOT SHOWN ... write the response duration out to a file

    var endedOn = DateTime.UtcNow;

    var threadDuration = endedOn - startedOn;

    // sleep for one second
    var oneSecond = new TimeSpan(0, 0, 1);
    if (threadDuration < oneSecond)
    {
        System.Threading.Thread.Sleep(oneSecond - threadDuration);
    }
}
);

当我将MaxDegreeOfParallelism设置为较低的值(例如10时,一切正常,responseDuration保持在1到3秒之间。如果我将值增加到100(如示例中所示),responseDuration会快速爬升,直到大约300次请求后,它已经达到25秒(并且仍在攀升)。

我认为我可能做错了所以我也使用标准Apache jMeter设置运行web test plan并将用户设置为100.在大约300个样本之后,响应时间飙升到大约40秒。

我对我的服务器达到极限持怀疑态度。服务器上的任务管理器显示,只有2GB的16GB正在使用,处理器的工作量大约为5%。

  1. 我可以对客户端计算机上的同时连接数量进行一些限制吗?如果是这样,我该如何更改?
  2. 我忘了在代码中做些什么吗?清理/关闭连接?
  3. 可能是我的代码没问题,实际上我的服务器无法处理流量吗?
  4. 作为参考,运行上述代码的客户端计算机运行的是Windows 7,并且与我正在测试的服务器位于同一网络上。该服务器运行的是Windows Server 2008 IIS 7.5,是一台专用的8核16GB RAM计算机。

2 个答案:

答案 0 :(得分:2)

只有当您尝试限制要用作程序策略一部分的核心数时,才应使用MaxDegreeOfParallelism。

默认情况下,并行库使用大量可用线程 - 因此将此选项设置为任何数字主要会限制性能,具体取决于运行它的环境。

我建议您尝试运行此代码而不设置此选项,这样可以提高性能。

ParallelOptions.MaxDegreeOfParallelism Property in MSDN - 阅读备注部分以获取更多信息。

答案 1 :(得分:1)

几点建议:

  1. 您录制的Jmeter测试脚本有多大,是否插入了一些思考时间?测试越大,负载越重。
  2. 确保在测试运行期间竞争流量未使用LAN。拥有千兆以太网交换机应该是强制性的。
  3. 使用2-3台奴隶机器,避免在Jmeter中使用重型结果记录器,如树。你最好尽量减少这些图形和结果。