标签: connection-pooling

如何检测我的代码是否在Sidekiq服务器或Puma"内部"运行?

我正在使用Puma作为Web服务器,而Sidekiq作为我的队列运行器.

对于多个事物(数据库连接,Redis连接,其他外部服务),我正在使用ConnectionPool gem来管理对连接的安全访问.

现在,根据我是在Sidekiq还是Puma的上下文中运行,我需要这些池的大小不同(分别与Sidekiq线程或Puma线程的数量一样大,它们是不同的)

在初始化程序中,了解基于执行上下文建立连接池的最佳方法的最佳方法是什么?

谢谢!

ruby connection-pooling sidekiq puma ruby-on-rails-4

13
推荐指数
1
解决办法
2030
查看次数

为什么HikariCP建议使用固定大小的池以获得更好的性能

根据HikariCP的文档,他们提到创建固定大小的池以获得更好的性能.

minimumIdle:

此属性控制HikariCP尝试在池中维护的最小空闲连接数.如果空闲连接低于此值,HikariCP将尽最大努力快速有效地添加其他连接.但是,为了获得最高性能和对峰值需求的响应,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接池.默认值:相同maximumPoolSize

我的应用程序通常需要100个连接,并且仅在少数情况下达到200个连接.

如果我创建一个200连接固定大小的池,大多数时候100个连接将是空闲的.

那么以下哪一项是最好的:

  1. 创建固定大小的连接池.即200

要么

  1. 通过设置minimumIdle为100和maximumPoolSize200 来创建连接池.

为什么HikariCP不推荐第二点?我认为第二个对我来说是最好的.

java database sql-server connection-pooling hikaricp

13
推荐指数
1
解决办法
9851
查看次数

HttpClientError:目标服务器无法响应

我正在尝试使用http客户端使用PoolingClientConnectionManager为各个主机设置最大连接来命中服务器

 //Code that inilizes my connection mananger and http client 
Run Code Online (Sandbox Code Playgroud)

HttpParams httpParam = httpclient.getParams(); HttpConnectionParams.setSoTimeout(httpParam,SOCKET_TIMEOUT);

    HttpConnectionParams.setConnectionTimeout(httpParam, CONN_TIMEOUT);

    httpclient.setParams(httpParam);

    //Run a thread which closes Expired connections
    new ConnectionManager(connManager).start(); 

        //Code that executes my request 
    HttpPost httpPost = new HttpPost(url);
            HttpEntity httpEntity = new StringEntity(request, "UTF-8");
    httpPost.setEntity(httpEntity);

    Header acceptEncoding = new BasicHeader("Accept-Encoding", "gzip,deflate");
    httpPost.setHeader(acceptEncoding);     

    if(contenttype != null && !contenttype.equals("")){
        Header contentType = new BasicHeader("Content-Type", contenttype);
        httpPost.setHeader(contentType);
    }
            InputStream inputStream = null;
    LOG.info(dataSource + URL + url + REQUEST + request);

    HttpResponse …
Run Code Online (Sandbox Code Playgroud)

java apache connection-pooling httpclient

13
推荐指数
2
解决办法
5万
查看次数

如何为postgres连接设置application_name?

我正在使用tomcat连接池org.apache.tomcat.jdbc.pool.DataSource.连接在我的数据库中显示pg_stat_activity为空application_name.

我如何在我的java应用程序中设置该应用程序名称,因此我知道每个连接的来源(因为将有多个应用程序访问同一个数据库)?

java postgresql connection-pooling tomcat-jdbc

13
推荐指数
4
解决办法
8618
查看次数

有没有办法在php页面之间共享对象?

我是php的新手,但在其他Web技术中,您可以在页面实例之间共享对象.例如,在java jsp页面中,您可以轻松拥有作为整个服务器实例的静态类存在的类.如何在PHP中执行此操作?

我没有引用会话变量(至少我不这么认为).这更多是出于资源池的目的(可能是要共享的套接字或数据库连接等).因此,需要在后续加载之间共享整个类,而不仅仅是我可以在会话中存储的一些原始变量.

我也研究过做单例类,但我相信这个类只在同一页面内共享,而不是在页面之间共享.

为了使事情更加清晰,我正在寻找可以帮助我分享连接到服务器的socket的插件,以便加载该页面的所有用户使用相同的套接字并且不打开新的一个.

php connection-pooling

12
推荐指数
2
解决办法
6534
查看次数

来自DUAL的SELECT 1:MySQL

在查看我的查询日志时,我看到一个奇怪的模式,我没有解释.

在几乎所有查询之后,我都"从DUAL中选择1".

我不知道它来自何处,我当然不会明确地进行查询.

日志基本上如下所示:

    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    ...etc...
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这个问题吗?

MySQL版本:5.0.51

驱动程序:使用JDBC的Java 6应用程序.MySQL的连接器的Java-5.1.6-bin.jar

连接池:commons-dbcp 1.2.2

validationQuery被设置为"从DUAL中选择1"(显然),并且当验证查询非空时,显然连接池默认testOnBorrow和testOnReturn为true.

这给我带来的另一个问题是,我是否真的需要验证查询,或者我是否可以通过禁用它或至少降低其使用频率来提高性能.不幸的是,编写我们的"数据库管理员"的开发人员不再和我们在一起了,所以我不能要求他为我辩护.任何输入将不胜感激.我将深入挖掘API并谷歌一段时间,如果我发现任何值得的东西,我会报告.

编辑:添加了一些更多的信息

EDIT2:为以后发现此问题的任何人添加了正确答案中要求的信息

java mysql connection-pooling apache-commons-dbcp

12
推荐指数
2
解决办法
2万
查看次数

在连接池关闭之前,sql server连接必须闲置多长时间?

我有一个客户端 - 服务器应用程序,使用.NET SqlClient数据提供程序连接到SQL服务器 - 非常标准的东西.默认情况下,在连接池管理器关闭数据库连接并将其从池中删除之前,连接必须有多长时间空闲?有什么设置控制这个?

这个MSDN文档只说

连接池在空闲了很长时间后,或者如果池中检测到与服务器的连接已被切断,则会从池中删除连接.

sql-server connection-pooling

12
推荐指数
1
解决办法
3万
查看次数

Npgsql:从池中获取连接时超时

背景:我正在将我的应用程序从mssql移动到npgsql v2.0.11.92.运行我的应用程序几分钟或几小时后,我得到一个System.Exception:从池中获取连接时超时.

我在x64平台的x86环境中使用lib版本2.0.11.92.最迟关闭所有连接并将其置于finally块中,但过了一段时间后,我收到错误.所以,它应该是Npgsql库的问题.

在我的应用程序中,每隔几秒就会在后台发生很多查询,但大多数情况下,它们只是按顺序运行,而不是在并行运行.

我使用的连接字符串是:SERVER = mydbserver; MINPOOLSIZE = 3; MaxPoolSize = 15; ConnectionLifeTime = 7; DATABASE =测试DB; UID =用户; PWD =通过

我正在尝试诊断npgsql中泄漏的postgres连接.

仅供参考:Npgsql库已经出现了泄漏问题,已在最新版本2.0.11.92中修复.但我认为仍有一些问题.

有没有人遇到过与当前库版本(npgsql v2.0.11.92)类似的问题?

connection connection-pooling npgsql postgresql-9.1

12
推荐指数
1
解决办法
9800
查看次数

分析Spring/JPA/Mysql/Tomcat应用程序中的Connection Closed Exception

问题

我最近负责一个Java Web应用程序,代码已经编写完成.该应用程序接收适度高流量,并在每天上午11点至下午3点之间达到高峰时段.该应用程序使用Spring,JPA(Hibernate),MYSQL DB.Spring已配置为使用tomcat jdbc连接池来建立与DB的连接.(帖子末尾的配置细节)

在过去的几天里,在应用程序的高峰负载时间内,由于tomcat对请求没有响应,应用程序已经停止运行.它需要多次重启tomcat.

通过tomcat catalina.out日志,我注意到了很多

Caused by: java.sql.SQLException: Connection has already been closed.
    at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:117)
    at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109)
    at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80)
    at com.sun.proxy.$Proxy28.prepareStatement(Unknown Source)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
    ... 115 more
Run Code Online (Sandbox Code Playgroud)

这些经常在崩溃之前出现.

在这些异常之前更进一步,我注意到在Connection Closed异常之前放弃了很多Connections.

WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.Connection@543c2ab5]:java.lang.Exception
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1065)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:782)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:618)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:47)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
Run Code Online (Sandbox Code Playgroud)

这些似乎经常出现在Connection Closed异常之前.这些似乎是日志即将崩溃的第一个症状.

分析

按日志,我开始查看是否存在可能导致问题的任何连接池配置/ mysql配置.通过一些优秀的文章,展示了生产环境池的调整.链接12

通过这些文章,我注意到:

  1. JHanik的文章(链接1)中的下面一行提到了这一点

    将abandonWhenPercentageFull的值设置为100意味着除非我们达到maxActive限制,否则不会将连接视为放弃. …

java spring tomcat hibernate connection-pooling

12
推荐指数
2
解决办法
2万
查看次数

Spark Java框架中的连接池

Java Spark框架使用嵌入式Jetty作为Web服务器.Jetty支持使用HikariCP等工具进行连接池,并在XML文件中提供配置选项.但是,根据这些帖子,Spark确实允许配置Jetty.有很多使用Spark的例子,但他们要么不使用数据库,要么使用DriverManager连接数据库.

是否可以通过Spark中的数据源和JNDI配置连接池?如果是这样,怎么样?

java jndi connection-pooling jetty spark-java

12
推荐指数
1
解决办法
2692
查看次数