在我的代码中有一个构建Futures的循环,这是减速的方法。构建1个Future需要大约数百毫秒。我只是在谈论设置Future对象而不是关于获得Reponse。这是代码:
while(settings.getCrawlerQueue().size() < settings.getCrawlerQueueSize()) {
Task task = taskQueue.poll();
task = setFutureInTask(assignment, task);
}
setFutureInTask()
代码:
public Task setFutureInTask(String assignment, Task task) {
task.setParserAssignment(assignment);
switch(assignment){
case "stuff":
task.setFuture(asyncClientStandard
.prepareGet("http://"+task.getDomain())
.execute()
);
break;
[...]
我在一些我读过的东西(无法找到它:/)中尝试了不同的Java JDK和版本,但这没有帮助。还尝试JDKAsyncHttpProvider
而不是默认的NettyAsyncHttpProvider
,这更快,但也提供了非常多的Flase-Negatives(它似乎取消非常(!)经常有效的域)。
我注意到的是:我住在德国和德国.de-domains比来自西班牙等其他国家的域名更快。
非常感谢任何狂野的猜测! :)
[EDIT]
只需切换到另一台DNS服务器即可解决问题。
答案 0 :(得分:1)
在编写和试验我的HTTP负载测试插件时,我遇到过类似的(如果不是完全相同的)问题。在创建未来时,名称解析似乎是同步,如果您的DNS缓存无法正常工作,则每次都要支付整个DNS查找往返。
关于如何修复这个问题,很难说。我通常会切换到另一个不会显示此问题的网络接口。