Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接太多_Java_Mysql_Hikaricp - Fatal编程技术网

Java 连接太多

Java 连接太多,java,mysql,hikaricp,Java,Mysql,Hikaricp,我有一个Javaservlet,我想与jdbc(数据库:mysql)一起使用连接池 下面是我正在做的: (此类为公共最终类DBConnector) 当我想叫它的时候: Connection con = null; PreparedStatement query = null; ResultSet result = null; try { con = DBConnector.getConnection(0); }catch(SQLException

我有一个Javaservlet,我想与jdbc(数据库:mysql)一起使用连接池

下面是我正在做的:

(此类为公共最终类DBConnector)

当我想叫它的时候:

Connection con = null;
    PreparedStatement query = null;
    ResultSet result = null;
    try {
        con = DBConnector.getConnection(0);
    }catch(SQLException ex){
    }finally{
       if (result != null) {
            try {
                result.close();
            } catch (SQLException logOrIgnore) {
            }
        }
        if (query != null) {
            try {
                query.close();
            } catch (SQLException logOrIgnore) {
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException logOrIgnore) {
            }
        }
    }
但当我点击我的应用程序时,过了一段时间它开始挂起,我发现以下错误:

java.sql.SQLException: Timeout after 1001ms of waiting for a connection.
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:208)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:108)
at main.java.db.DBConnector.getConnection(DBConnector.java:60)
at main.java.ressources.SingleItemData.getVotes(SingleItemData.java:1088)
at main.java.item.methods.GET.content.GetStreamContent.getStreamContent(GetStreamContent.java:126)
at main.java.RestService.doGet(RestService.java:254)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

我将mysql最大连接数设置为1000。“showProcessList”查询向我显示了许多休眠进程。这些是闲置的吗

我真的被困在这里了。不知道是哪个设置导致了该问题。所以我的问题是-是什么导致了这个错误?我做错了什么?谢谢你的帮助

编辑: 安装Mysql(本地主机):

HikariCP:
HikariCP-java6-2.2.5.jar


MySQL连接器:
MySQL-Connector-java-5.1.25-bin.jar

两件事。首先,HikariCP、Java和MySQL驱动程序的版本是什么

第二,一个池中有400个连接?在每个池中从10到20开始。你会惊讶于每秒可以处理几千个事务

第三,这是第二个问题。阅读答案和链接。您需要将
maxLifetime
设置为比MySQL本机超时更短的时间(1分钟)


最后,打开调试日志记录,HikariCP没有噪音。管理线程每30秒运行一次,并记录池统计信息。

是,这是正确的。所有休眠进程都是空闲进程。做一件事,在创建任何连接之前,您需要检查连接状态,如果有任何打开的连接,请关闭它,然后重新创建。感谢您的快速回答。哦,不,除了那张支票,没有别的支票了。我该怎么做我建议您减少代码中的超时时间<代码>数据源3.setConnectionTimeout(1000)确定-我将按照另一个教程中的建议将其设置为34000。我很快会回信的;)不,这并没有改变它。相同错误:
java.sql.SQLException:等待连接3401ms后超时。在com.zaxxer.hikari.hikari.pool.HikariPool.getConnection(HikariPool.java:208)在com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:108)在main.java.db.DBConnector.getConnection(DBConnector.java:62)在main.java.item.methods.GET.content.GetCont.getContent(GetCont.java:58)在main.java.RestService.doGet(RestService.java:511)上
这是我现在的新值:
dataSource2.setConnectionTimeout(34000);数据源2.setIdleTimeout(28740000);数据源2.setMaxLifetime(28740000)好,它正在工作。我按照你说的调整了所有的设置。我还发现了一个小漏洞(我没有关闭连接-愚蠢…),但一个漏洞真的那么有害吗?因为在此之前,我没有使用连接池,泄漏也没有那么严重。啊。当然,谢谢你:)让我开心。没有池的未关闭连接通常是无害的,特别是如果你使用自动提交。连接对象将被垃圾收集,最终数据库将关闭其连接端。对于池,未关闭的连接将导致应用程序冻结,因为池具有最大大小,并且当连接未返回时,最终将清空所有连接。因此,getConnection()的下一个调用方将始终超时。这就是为什么几乎所有的池都支持泄漏检测。
java.sql.SQLException: Timeout after 1001ms of waiting for a connection.
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:208)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:108)
at main.java.db.DBConnector.getConnection(DBConnector.java:60)
at main.java.ressources.SingleItemData.getVotes(SingleItemData.java:1088)
at main.java.item.methods.GET.content.GetStreamContent.getStreamContent(GetStreamContent.java:126)
at main.java.RestService.doGet(RestService.java:254)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
[mysqld]

user=mysql

port=3306

socket      =/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

key_buffer=16M

max_allowed_packet=1M

table_open_cache=64

sort_buffer_size=512K

net_buffer_length=8K

read_buffer_size=256K

read_rnd_buffer_size=512K

myisam_sort_buffer_size=8M

max_connections = 1000

wait_timeout = 28800

interactive_timeout = 28800