【问题标题】:Specifying socket options in Gatling在 Gatling 中指定套接字选项
【发布时间】:2016-01-21 13:58:34
【问题描述】:

在对虚拟 RESTful 服务进行性能测试时,我遇到了 ConnectException: Cannot assign requested address 问题,描述为 herehere,并应用了 tuning recommendations - 将临时端口范围增加到 10000-65000,我的 @987654328 @ 是 64000,我什至启用了 net.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recycle - 有关这些的更多信息,请参阅这篇出色的博文 Coping with the TCP TIME-WAIT state on busy Linux servers

这仍然没有帮助,我仍然可以每秒最多模拟 10k 个请求(因为在我的测试中每个用户只做一个请求),所以我有 scaled out 到 4 台和后来的 8 台客户端机器。在 4 台机器上,我每台机器可以执行 5k 请求/秒(总共 20k),但在 8 台机器上我什至无法在这 5k 上运行,所以问题可能出在其他地方。

不过,我想问一下是否有任何选项可以在 gatling 连接上设置 SocketOptions,无论是通过模拟还是通过 gatling.conf - 我想在那里使用 SO_REUSEADDR。 gatling.conf中可以设置一些选项(连接超时),但是我没有找到这个。

另外,是否有任何文档描述 Gatling 如何共享连接?我希望“用户”获取他们的连接实例或虚拟每个用户打开他的连接的大连接池,但在某处我读到每个用户都有一个连接池(他与谁共享连接,那么?还是这些只是在他之前的请求中使用的缓存连接?)。

编辑: 所以最终解决方案很简单:在设置ScenarioBuilder.protocols(...) 时使用.shareConnections。我尝试使用 -Dgatling.core.http.shareConnections 作为命令行参数(我正在从 maven 插件运行测试)但它不起作用;程序化方法做到了。

【问题讨论】:

  • 还有一点需要注意:即使使用net.ipv4.tcp_tw_reuse,我仍然可以在ss -iat 中看到很多time_wait 连接,鉴于这些错误,我不确定它是否应用正确。很遗憾,我无法在不丢失配置的情况下重新启动整个服务器 - 我应该重新启动任何特定服务吗?
  • 哦,谢谢@Radim Vansa!设置.shareConnections 为我解决了这个问题。没有它,我每秒无法处理超过 500 个请求。将它与ulimit -n 64000 一起使用就可以了。

标签: sockets tcp gatling time-wait


【解决方案1】:

我想在那里使用 SO_REUSEADDR。

不可能自动取款机。将在 2.2 中。

是否有任何文档描述 Gatling 如何共享连接?

是的,here。默认是每个虚拟用户一个连接池,因为一个虚拟用户在获取资源时可以使用多个并发连接,就像浏览器一样。然后,您可以切换到一个共享全局池。

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2014-12-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多