问题描述:
我用java的netty框架做了一个网关程序,专门用来接收设备上报数据,然后将数据插入到mysql数据库中,但随着项目运行一段时间后(一天活几个小时),发现数据不插入到数据库了,然后立刻查看日志,发现日志也不打印信息,但是程序进程还在,端口也是在正常监听的,详细查看历史日志后,发现是c3p0报了一段错误,说什么 getConnection()一直在等待(我这里使用了jstat命令,来看看jvm线程运行的情况),发现日志里大量的阻塞线程,全部都是因为c3p0连接池获取连接阻塞。我一开始以为是c3p0的bug,为了排除它,我立马将连接池切换成了"光速池"--------HikariCP, 照网上说的配置参数一顿修改,但是程序运行不久,又出现了阻塞的情况,我真的懵逼了。网上有说是配置参数的问题,什么连接存活时间设置的大于了mysql的wait_timeout参数等等,于是我又依葫芦画瓢一顿修改参数,发现真的没有卵用(PS:一定要有自己的思考)。参数基本不会出现什么问题的,除非你的存活时间lifetime参数设置的确实特别大,一般我就设置成这样:
// 允许连接在连接池中空闲的最长时间(毫秒单位)
dataSource.setConnectionTimeout