加特林。 ConnectException:连接超时:

时间:2017-10-17 12:10:01

标签: scala testing intellij-idea load gatling

我是gatling的新人,现在正在其网站computer-database.gatling.io上试验Gatling。

一切正常,我将在几天内对我的项目进行负载测试,但有一个问题, 我的网站每秒需要2000个用户(当我阅读其他资源时,这似乎不是什么大问题)

我有这个简单的代码:我想在300秒内加载250个用户/管理员,现在问题和问题(请帮我解决这个问题) 当我开始使用这个脚本时:

package load

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.core.structure.ChainBuilder
import io.gatling.jdbc.Predef.jdbcFeeder
import scala.util.Random
import scala.concurrent.duration._

class TestOvo extends Simulation {
 val httpProtocol = http
 .baseURL("http://computer-database.gatling.io")
 .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
 .acceptEncodingHeader("gzip, deflate")
 .acceptLanguageHeader("en-US,en;q=0.8")
 .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")

 val headers_0 = Map("Upgrade-Insecure-Requests" -> "1")

 val headers_10 = Map(
 "Origin" -> "http://computer-database.gatling.io",
 "Upgrade-Insecure-Requests" -> "1")

 object Search {
 val search = exec(http("request_0")
 .get("/")
 .headers(headers_0))
 .pause(1)
 .exec(http("request_1")
 .get("/computers?f=macbook")
 .headers(headers_0))
 .pause(2)
 .exec(http("request_2")
 .get("/computers/89")
 .headers(headers_0))
 .pause(2)
 .exec(http("request_3")
 .get("/")
 .headers(headers_0))
 .pause(2)
 }
 object Browse {
 val browse = exec(http("request_4")
 .get("/computers?p=1")
 .headers(headers_0))
 .pause(1)
 .exec(http("request_5")
 .get("/computers?p=2")
 .headers(headers_0))
 .pause(1)
 .exec(http("request_6")
 .get("/computers?p=3")
 .headers(headers_0))
 .pause(2)
 .exec(http("request_7")
 .get("/computers?p=4")
 .headers(headers_0)
 .resources(http("request_8")
 .get("/computers?p=5")
 .headers(headers_0)))
 .pause(1)
 }

 object Edit {
 val edit = exec(http("request_9")
 .get("/computers/new")
 .headers(headers_0))
 .pause(1)
 .exec(http("request_10")
 .post("/computers")
 .headers(headers_10)
 .formParam("name", "VoxooBox")
 .formParam("introduced", "12.11.2017")
 .formParam("discontinued", "")
 .formParam("company", "16")
 .check(status.is(400)))
 .pause(1)
 .exec(http("request_11")
 .post("/computers")
 .headers(headers_10)
 .formParam("name", "VoxooBox")
 .formParam("introduced", "2017.08.17")
 .formParam("discontinued", "")
 .formParam("company", "16")
 .check(status.is(400)))
 .pause(1)
 .exec(http("request_12")
 .post("/computers")
 .headers(headers_10)
 .formParam("name", "VoxooBox")
 .formParam("introduced", "2017-08-17")
 .formParam("discontinued", "")
 .formParam("company", "16"))
 }

 val users = scenario("Users").exec(Search.search, Browse.browse);
 val admins = scenario("Admins").exec(Search.search, Browse.browse, Edit.edit);

 setUp(
 users.inject(constantUsersPerSec(200) during (300 seconds)),
 admins.inject(constantUsersPerSec(50) during (300 seconds))
 ).protocols(httpProtocol)

}

它最大化用户指标:

================================================================================
2017-10-17 14:47:20                                          25s elapsed
---- Requests ------------------------------------------------------------------ 

> Global                                                   (OK=15950  KO=0     ) 

> request_0                                                (OK=5046   KO=0     ) 

> request_0 Redirect 1                                     (OK=3829   KO=0     ) 

> request_1                                                (OK=2582   KO=0     ) 

> request_2                                                (OK=1589   KO=0     ) 

> request_3                                                (OK=1249   KO=0     ) 

> request_3 Redirect 1                                     (OK=897    KO=0     ) 

> request_4                                                (OK=423    KO=0     ) 

> request_5                                                (OK=224    KO=0     ) 

> request_6                                                (OK=88     KO=0     ) 

> request_7                                                (OK=17     KO=0     ) 

> request_8                                                (OK=6      KO=0     )

---- Users ---------------------------------------------------------------------
[------                                                                    ]  0%

          waiting: 55156  / active: 4842   / done:2     
---- Admins --------------------------------------------------------------------
[------                                                                    ]  0%

          waiting: 13788  / active: 1212   / done:0     
================================================================================

14:47:21.107 [WARN ] i.g.h.a.ResponseProcessor - Request 'request_5' failed: j.n.ConnectException: connection timed out: computer-database.gatling.io/35.158.229.206:80

然后出现这些错误:

[WARN] i.g.h.a.ResponseProcessor - 请求'request_4'失败:j.n.ConnectException:连接超时:computer-database.gatling.io/35.158.229.206:80 13:31:12.407 [警告] i.g.h.a.ResponseProcessor - 请求'request_4'失败:j.n.ConnectException:无法打开套接字。

在gatling.conf中我找到了这些行:

ahc {
  #keepAlive = true                                # Allow pooling HTTP connections (keep-alive header automatically added)
  #connectTimeout = 10000                          # Timeout when establishing a connection
  #handshakeTimeout = 10000                        # Timeout when performing TLS hashshake
  #pooledConnectionIdleTimeout = 60000             # Timeout when a connection stays unused in the pool
  #readTimeout = 60000                             # Timeout when a used connection stays idle
  #maxRetry = 2                                    # Number of times that a request should be tried again
  #requestTimeout = 60000                          # Timeout of the requests
  #acceptAnyCertificate = true                     # When set to true, doesn't validate SSL certificates
  #httpClientCodecMaxInitialLineLength = 4096      # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK")
  #httpClientCodecMaxHeaderSize = 8192             # Maximum size, in bytes, of each request's headers
  #httpClientCodecMaxChunkSize = 8192              # Maximum length of the content or each chunk
  #webSocketMaxFrameSize = 10240000                # Maximum frame payload size

我想这可能与我的问题有关,或者我做错了什么?这是我的副刊或他们的网站不能接受吗?

为什么我发布时

users.inject(constantUsersPerSec(200) during (300 seconds)),
 admins.inject(constantUsersPerSec(50) during (300 seconds))

在终端中

waiting: 55156  / active: 4842   / done:2
 waiting: 13788  / active: 1212   / done:0 

这么多?它是如何计算的?或者为什么,请向我解释一下。 谢谢。

我的电脑: 苹果系统 版本:10.12.6( 处理器:2.6 GHz Intel Core i5 内存:8 GB 1600 MHz DDR3

1 个答案:

答案 0 :(得分:3)

constantUsersPerSec()是关于您注入的用户数量,而不是总用户数。

constantUsersPerSec(200) during (300 seconds),这是6万用户。因此,它与waiting: 55156 / active: 4842 / done:2 = 60k用户匹配。

我认为您真正想要的是使用以下策略注入用户:rampUsers(10) over (300 seconds)