在对虚拟 RESTful 服务进行性能测试时,我遇到了ConnectException: Cannot assign requested address
问题,在此处或此处进行了描述,并应用了调整建议- 将临时端口范围增加到 10000-65000,我ulimit -n
的是 64000,我什至启用net.ipv4.tcp_tw_reuse
了net.ipv4.tcp_tw_recycle
- 有关这些的更多信息在这篇优秀的博文中处理繁忙的 Linux 服务器上的 TCP TIME-WAIT 状态。
这仍然没有帮助,我仍然可以每秒最多模拟 10k 个请求(因为在我的测试中每个用户只做一个请求),所以我已经扩展到 4 台和更高版本的 8 台客户端机器。在 4 台机器上,我每台机器可以执行 5k 请求/秒(总共 20k),但在 8 台机器上,我什至无法在这 5k 上运行,所以问题可能出在其他地方。
不过,我想问一下是否有任何选项可以设置SocketOptions
在 gatling 连接上,无论是通过模拟还是通过 gatling.conf - 我想在那里使用SO_REUSEADDR。可以在 gatling.conf 中设置一些选项(连接超时),但我还没有找到这个。
此外,是否有任何文件描述 Gatling 如何共享连接?我希望“用户”获取他们的连接实例或虚拟每个用户打开他的连接的大连接池,但在某处我读到每个用户都有一个连接池(他与谁共享连接,那么?还是这些只是他之前的请求中使用的缓存连接?)。
编辑:所以最终解决方案很简单:.shareConnections
在设置时使用ScenarioBuilder.protocols(...)
. 我曾尝试-Dgatling.core.http.shareConnections
用作命令行 arg(我正在从 maven 插件运行测试),但它不起作用;程序化方法做到了。