syg*_*ram 10 mysql tomcat hibernate pooling
我已经阅读了很多关于从hibernate会话自动重新连接到mysql的问题的帖子.其他人提到增加mysql wait_timeout(不是我最喜欢的),使用autoReconnect = true(不推荐),测试连接等我正在尝试一些选项,但我想问一下是否有人使用tomcat的连接池有坚如磐石的解决方案(不是hibernate的c3po).我正在寻找最具防弹性的jndi设置,即使它们不是最好的性能调整.
非常感谢你,
问候
Usm*_*kil 20
好问题.我用来解决这个问题.对于几乎每个问题,stackoverflow上最常见的答案是"它取决于......".我不愿意这么说但是没有比调整你的连接池更有意义的地方.它实际上是一个供需游戏,您的连接请求是需求,供应是MySQL可用的连接数.这主要取决于您的主要关注点是阻止从池中返回过时的连接,还是您的关注是否确保MySQL没有因空闲连接而过载,因为您没有足够快地杀死它们.大多数人在中间某些地方撒谎.
如果你真的明白为什么有人会选择任何一个连接池配置,那么请相信我你将停止搜索"Rocket Solid"设置,因为你会知道这就像是在网上搜索你的商店计划; 它完全取决于您获得多少连接请求以及您愿意提供多少持久连接.下面我举例说明您使用某些设置的原因.我引用了您必须在Context.xml文件的"Context"标记的"Resource"标记内更改的变量.可以在最底部看到样本完整配置.
低流量
在这种情况下,您对应用程序的请求很少,因此连接池中的所有连接很可能会过时,并且应用程序通过陈旧连接发出的第一个请求将导致错误.(根据您使用错误的MySQL驱动程序,可能会解释收到的最后一个成功数据包超出了数据库的wait_timeout设置).因此,您的连接池策略是防止返回死连接.对于低流量站点,以下两个选项几乎没有副作用.
在终止连接之前等待更长时间 - 您可以通过更改wait_timeoutMySQL配置中的值来完成此操作.在MYSQL工作台中,您可以在Admnin>配置文件>网络下轻松找到该设置.对于具有大量流量的站点,通常不建议这样做,因为它可能导致池中始终充满大量空闲连接.但请记住,这是低流量情况.
测试每个连接 - 您可以通过设置testOnBorrow = true和来完成此操作validationQuery= "SELECT 1".性能怎么样?在这种情况下,您的流量很低.测试从池返回的每个连接都不是问题.这意味着将在您在单个连接上执行的每个MySQL事务中添加一个额外的查询.在交通流量较低的网站上,您真的会担心这个问题吗?由于没有使用你的连接在池中死亡的问题是你的主要关注点.
中等交通
validationQuery = "SELECT 1",testWhileIdle = "true"和/ timeBetweenEvictionRunsMillis = "3600"或您想要的任何间隔.对于非常低的流量,这绝对需要更多的工作.想一想.如果池中有30个连接,并且在1小时内只有4个被调用,那么您可以使用之前的testOnBorrow方法轻松检查每个请求上的所有4个连接,但性能损失很小.但是,如果您执行"每小时检查一次"方法,那么当仅使用4个时,您将发出30个检查所有连接的请求.交通繁忙
wait_time因此您不会在DB上结束大量空闲连接.下面是一个讨论如何每天为繁忙站点提供多达10,000个空闲连接的小伙子的示例,因此他想降低wait_timeout 降低忙碌站点的wait_timeout示例Context.xml配置
<Context>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="100"
minIdle="10"
maxWait="10000"
initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="root"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mysql"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
示例web.xml配置
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
Run Code Online (Sandbox Code Playgroud)
有关Tomcat Pool属性的文档,用于调整Tomcat Pool
| 归档时间: |
|
| 查看次数: |
5809 次 |
| 最近记录: |