在 Gatling 中指定套接字选项

Specifying socket options in Gatling

在对虚拟 RESTful 服务进行性能测试时,我 运行 遇到了 ConnectException: Cannot assign requested address 问题,描述为 here or here, and applied the tuning recommendations - increased the ephemeral port range to 10000-65000, my ulimit -n is 64000 and I have even enabled net.ipv4.tcp_tw_reuse and net.ipv4.tcp_tw_recycle - more info about these on this excellent blogpost Coping with the TCP TIME-WAIT state on busy Linux servers

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

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

另外,有没有文档描述Gatling是如何共享连接的?我希望 'users' 获取连接实例的大连接池或虚拟每个用户打开他的连接,但我在某处读到每个用户都有一个连接池(他是谁共享连接然后呢?或者这些只是他之前请求中使用的缓存连接?)。

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

I'd like to use SO_REUSEADDR there.

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

is there any document describing how does Gatling share connections?

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