Okhttpclient连接池大小困境

时间:2018-03-02 12:37:29

标签: java okhttp okhttp3

我目前正在使用okhttp 3.10.0,我最近发现为每个新请求创建一个新客户端对每个拥有它自己的连接池的客户都不利。

我在servlet中使用okhttp。无论我现在做的是在每个servlet中声明一个静态客户端并在init()方法中初始化它

client = new OkHttpClient.Builder()
              .readTimeout(15000,TimeUnit.MILLISECONDS)
              .retryOnConnectionFailure(false)
              .connectTimeOut(10000,TimeUnit.MILLISECONDS)
              .connectionPool(new ConnectionPool(20,5L,TimeUnit.MINUTES)
              .build();

现在,这里有最大空闲连接的配置,我设置为20,空闲超时设置为5分钟。

1)实际的池大小是多少,即池将具有的最大连接数(通过代码查看,我发现它可能是Integer.MAX_VALUE,并且与主机的最大同时连接是默认的64但是我&#39 ;我不确定)?

2)这种方法是否足够好。我目前的方法是为每个servlet创建一个客户端。所以我应该有一个单独的类给同一个客户端我所有的Servlet,在这种情况下,我应该为以下specs配置理想的负载。我无法找到如何配置实际的池大小所以我不# 39;不知道这是否可能

数字海洋水滴

Ram 2gb

Cpu核心2

Tomcat max heap 768mb

Nginx并发工人1000

Mysql max ram~800mb

加载我想支持每秒最多500个用户

1 个答案:

答案 0 :(得分:4)

您应该设置一个应用程序范围的单例。最好使用像Guice或Spring这样的依赖注入器,但静态单例也可以。

您要连接多少个不同的主机名?如果它很多,主机的长尾将不会受益于游泳池。如果它只是少数,那么你的池将跟踪你的同时连接。

对于起始点,将其设置为与servlet容器中的线程计数匹配。