当前位置: 首页 > 知识库问答 >
问题:

Okhttpclient连接池大小难题

杜成和
2023-03-14

我目前正在使用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和max同时连接到主机是默认64但我不确定)?

2) 这种方法足够好吗。我目前的方法是让每个servlet有一个客户机。因此,我应该有一个singleton类,它为我的所有servlet提供相同的客户机。在这种情况下,我应该为以下规范配置什么样的理想负载。我找不到如何配置实际的池大小,所以我不知道这是否可行

数字海洋液滴

内存2gb

Cpu核心2

Tomcat最大堆768mb

Nginx兼职员工1000人

Mysql最大ram~800mb

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

共有1个答案

包建义
2023-03-14

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

您连接到多少个不同的主机名?如果非常多,主机的长尾将不会从池中受益。如果只有几个,那么您的池将跟踪您的peek并发连接。

作为起点,将其设置为与servlet容器中的线程数相匹配。

 类似资料:
  • 所以我有几个关于这个实现的问题: 我的CLIENT_TIMEOUT比OkHttp ConnectTimeout短。如果我的抛出超时异常,解析器函数中的finally block还会执行吗?我指望它能关闭我的联系。 如何限制连接池的大小?如果连接超出限制,有没有办法自动回收最旧的连接?

  • 嘿,我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。 我在管理控制台中定义了到Oracle 11g的JDBC连接池,并设置了: 初始和最小池大小:500 最大游泳池大小:1000 池大小调整数量::750 我已经为这个连接池创建了一个特定的用户。然而,有时当我检查数据库中打开的连接时,我发现有1000多个连接(我看到的最大连接数是1440个) 当发生这种情况时,任何查询尝试都会失败,

  • 问题内容: 为什么在hibernate配置文件中为连接池设置10?size = 1是内置的size。为什么需要增加大小? 问题答案: 来自Hibernate API 文档。 但是,Hibernate自己的连接池算法非常初级。它旨在帮助您入门,不适合在生产系统中使用,甚至不用于性能测试。您应该使用第三方池来获得最佳性能和稳定性。只需将hibernate.connection.pool_size属性替

  • 问题内容: 我想使用OkHttpClient加载URL,如果给定URL的网站以pdf内容类型响应,我将继续下载PDF,否则我想忽略响应。 我的问题是,我是否需要做一些特殊的事情来关闭请求/响应,或者如果我选择不读取响应字节流,是否需要做任何事情来表明我将不使用响应?如果没有,OkHttpClient何时关闭连接? 问题答案: 调用将释放响应所拥有的所有资源。连接池将使连接保持打开状态,但是如果未使

  • 我想使用OkHttpClient加载一个url,如果给定url的网站以pdf内容类型响应,我将继续下载pdf,否则我想忽略响应。 我的问题是,我是否需要做任何特别的事情来关闭请求/响应,或者我是否需要做任何事情来表明如果我选择不读取响应字流,我将不会使用响应?如果没有,OkHttpClient何时关闭连接?

  • 我对pgbouncer池大小配置和ORM(如sequelize.js)、query builder(如knex.js)库池大小配置感到困惑。架构如下: 应用代码= pgbouncer.ini: sequelize连接池配置: knex.js连接池配置: 如果我使用sequelize会发生什么。js连接池配置和pgbouncer连接池大小配置一起?数据库服务器使用哪种配置?我应该只使用其中一个吗?谢