是否有人可以比较不同ConnectionPool实现的性能特征?
背景:我有一个应用程序,该应用程序在同一线程上的后台线程中运行db更新到mysql实例。使用数据源com.mchange.v2.c3p0.ComboPooledDataSource偶尔会给我们带来SocketException:com.mysql.jdbc.CommunicationsException:由于底层异常导致通信链接失败:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Broken pipe
STACKTRACE:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
增加mysql连接超时会增加这些错误的频率。
这些错误在切换到其他连接池(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource)时消失了;但是,性能可能会更差,并且内存配置文件也是如此(与c3p0池相比,我们得到的GC更少,而且更大)。
无论使用哪种连接池,都需要假定该连接可以随时随机关闭,并使您的应用程序处理该连接池。
在“受信任”网络上建立长期数据库连接的情况下,经常发生的情况是操作系统对打开连接的时间设置了时间限制,或者定期运行一些“连接清除”代码。但是,原因并没有太大关系-您应该假设可以“从您的脚下拔下”连接,并相应地处理这种情况,这只是网络生活的一部分。
因此,鉴于此,我真的看不到不允许您以编程方式处理这种情况的连接池框架。
(顺便说一句,这是我的另一种情况,我很高兴自己编写了自己的连接池代码;没有黑匣子神秘地吞噬了内存,也没有必要四处寻找“魔术参数” ...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句