我们有用于集成测试的Gatling测试(错误)。 它在一处执行的操作之一是,它基于DropWizard 1.3.5在同一时刻向受测服务发出100个HTTP请求。
在从DropWizard 0.9.5升级之前,这可以正常工作。
但是现在,这些请求在客户端最终以ConnectException
结尾,并且在服务器端我看不到任何错误-DropWizard静默忽略了这些请求。我还查看了JMX上的池,没有看到这些池挂在任何地方。好像服务器失去了对套接字的跟踪,从未发送响应或“挂断”。
java.net.ConnectException: Connection timed out: somehost.mycompany.net/10.103.66.45:9000
我看过DropWizard config reference。我看不到被拒绝的内容和时间的任何微调。这是我当前的配置:
server:
maxThreads: 64
maxQueuedRequests: 1024
adminMaxThreads: 8
...
database:
url: jdbc:postgresql://localhost:5432/mydb
poolInitialSize: 20
poolMaxSize: 100
我包括数据库池大小,因为它可能是因为它收集了用于处理IoC的请求的资源,但是100应该覆盖所有Dw线程。
我希望额外的请求在队列中等待(由于使用了新的IO API,因此应该在OS端处理AFAIK)并由64个线程接受。
有趣的是,在将maxThreads
设置为64之前,应用了默认值1024;然后,有时测试通过了,有时没有通过。
我的问题是:
DropWizard是否有意这样做(DoS检测)?
如果是,该如何配置?
如果没有,那么那就是一个错误。