- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序每分钟都会被一个 http 请求查询。当 c3p0 运行 CullExpired 和其他后台线程时,应用程序暂时超时并变得无响应。此问题随机发生且间隔不频繁。在应用程序超时的所有实例中,我看到 c3p0 后台线程正在运行以尝试进行清理或驱逐空闲连接。这种情况非常随机发生,日志中没有其他异常。一段时间后,应用程序自动恢复并继续处理。有没有人遇到过这样的问题。
c3p0 version is <version>0.9.1.2</version>
hibernate version is <version>3.3.2.GA</version>
我的 c3p0 配置是:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="#{['app.jdbc.driverClassName']}"
p:jdbcUrl="#{['app.jdbc.url']}"
p:user="#{['app.jdbc.username']}"
p:password="#{['app.jdbc.password']}"
p:acquireIncrement="5"
p:idleConnectionTestPeriod="80"
p:maxAdministrativeTaskTime="600"
p:numHelperThreads="10"
p:maxIdleTime="60"
p:maxPoolSize="20"
p:maxStatements="30"
p:minPoolSize="10" />
最佳答案
c3p0 的后台线程始终存在;他们在线程池中运行。您已将该池的大小设置为 10 个线程 (c3p0.numHelperThreads)。如果你检查堆栈转储,在你的配置下你会看到像 CullExpired 这样的 c3p0 任务运行得非常频繁。这些频率与资源过期的配置设置处于同一数量级。在您的情况下,maxIdleTime 是 60 秒,因此剔除任务可能每 20 秒左右运行一次。 c3p0 的管理任务经过精心设计,不会在 IO 期间持有锁,并且通常是轻量级的,并且尽可能不与其他工作竞争。所以,如果是这些管理任务导致您挂起,那么就会发生一些奇怪的事情。但是这里很难区分原因和巧合:c3p0 的辅助线程始终存在并且管理任务经常运行。
maxIdleTime 是对您的问题的一种可能解释。您使用的配置不是很好。每分钟一个客户端连接对于 c3p0 来说是一个非常小的负载,但您的 minPoolSize 为 10 个连接。因此,c3p0 获取 10 个连接,将它们保留大约一分钟,然后过期并重新获取所有连接,这是大量的同时开销。您的 idleConnectionTestPeriod 为 80 秒是没有帮助的:永远不会测试空闲连接,因为它们将在空闲 60 秒后过期,在测试期结束之前。我还会将 acquireIncrement 降回其默认值 3。
我会尝试更好的配置,看看是否能解决问题。鉴于您描述的负载,我会将 minPoolSize 保留为默认值 3,并将 numHelperThreads 设置为 3。作为第一步,我会将 maxIdleTime 设置为其默认值零,但将 testConnectionOnCheckout 设置为 true。这是连接测试的最简单和最可靠的形式,但它要求客户端可见的性能成本。为了最小化该成本,您应该设置一个 preferredTestQuery 而不是依赖慢速默认连接测试。通常“SELECT 1”有效,但它可能取决于您的数据库/JDBC 驱动程序。如果事情看起来不错,您可能会更大胆地尝试性能稍高、健壮性稍差的连接测试策略:将 idleConnectionTestPeriod 设置为相对较小的值(例如 30),并将 testConnectionOnCheckin 设置为 true(并将 testConnectionOnCheckout 设置回其默认值 false) .参见 [ http://www.mchange.com/projects/c3p0/#configuring_connection_testing ]
另外,我现在会关闭语句缓存(将 maxStatements 设置为 0),等到情况稳定后再将其重新打开,以测试它是否能提高应用程序的性能。 [ 那是一个如果——见 http://www.mchange.com/projects/c3p0/#known_shortcomings ]
我还建议更新到最新版本的 c3p0 [c3p0-0.9.2-pre5]。连接获取在 0.9.2 中更轻量级,部分问题可能与每 1 分钟刷新和重新获取周期有关。总的来说,我认为0.9.2-pre系列现在已经很稳定了,值得使用。
希望对您有所帮助!
关于java - c3p0 导致应用程序偶尔超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215532/
关于strcat函数。 while (*p) p++; 和 while (*++p) ; 两者都有效,但是 while (*p++) ; 不起作用。我认为 first 和 th
" in HTML?(HTML中的““是什么
?)
下面例子中的第一行代码是什么。我看到一个YouTuber在写下面的代码,它显示了一个设计在csswar Challenges中。我也尝试了一下,它很管用。但我以前从未在任何HTML教程上看到过它,我在
vs.
是不间断空格,表示没有换行的空白处。 如果我用 我在两个段落之间有一个空格(更大的间隔)。如果我使用 我在两个段落之间只有一个新行(没有中断)。为什么? 最佳答案 在 HTML 中
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 9
我对编程还很陌生,只是想知道为什么这段代码: for ( ; *p; ++p) *p = tolower(*p); 当 p 指向一个字符串时,可以降低 c 中字符串的大小写吗? 最佳答案 一般来说,这
代码 int n = 25; int *p = &n; printf("%x\n %d\n %x\n", p, p[0], p[1]); 返回: \ 当然我永远不会这样做,但在 K&R 中声明
所以,我想创建一个简单的程序,返回有关连续素数的计算结果。首先,我创建一个包含所有这些素数的列表,然后尝试计算结果,但这给了我一个超出范围的索引。有人可以帮助我吗?我的程序: primes = []
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 9 年前。 我想知道 C/C++ 中以下四
我仍在努力理解 *p、&p 和 p 之间的区别。根据我的理解,* 可以被认为是“指向的值”,而 & 可以被认为是“地址”。换句话说,* 保存值,而 & 保存地址。如果这是真的,那么 *p 和 p 之间
你是吗? [xxxrecipientFirstNamexxx]
和你是吗? {recipientFirstName}
需要更换 你是吗? [xxxrecipientFirstNamexxx] 和 你是吗? {recipientFirstName} 。我尝试使用边界匹配器。但结果并不符合预期。我尝试使用下面的代码 "A
我想按 IsTop 属性升序排序对象,然后按 JobId 属性降序排序: query = query.OrderBy(p => p.IsTop).ThenOrderByDescending(p =
在我尝试使用 Apache POI 进行转换的 Excel 文件中,我有一个单元格的数值为 -3.97819466831428,自定义格式为“0.0 p.p.;(0.0 p.p.)”。因此,在 Exc
我想创建一个扩展方法,允许我调用 ToSerializableDictionary(p => p.ID)而不是 .ToDictionary(p => p.ID)在以下 LINQ 上下文中。虽然我不确定
在下面的 HTML 代码上运行此 jQuery 代码会返回不同的结果,我认为它们应该返回相同的值。 jQuery 代码: var counter = 0; $("p").each(function()
在下面的代码片段中,符号 *p 等同于 p[0],*(p + 1) 等同于p[1],依此类推。 int* p = new int[3] { 1, 2, 3}; cout << *p << ' ' <<
这个问题在这里已经有了答案: What will happen when I call a member function on a NULL object pointer? [duplicate]
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Undefined Behavior and Sequence Points 按照标准中的定义,E1 +=
" in HTML?(在HTML中“
以下示例中的第一行代码是什么。我看到一个youtube用户写下面的代码,它显示在cssbattle挑战的设计。我也试过,它的作品。但我从来没有见过它在任何HTML教程之前,我在谷歌上搜索它,但它只显示
每当我收到来自 MS outlook 的电子邮件时,我都会收到此标记 & nbsp ; (没有空格)哪个显示为?在 <>. 当我将其更改为 ISO-8859-1 时,浏览器页面字符集编码为 UTF-8
p1
TESTp2
代码: from bs4 import BeautifulSoup soup = BeautifulSoup('p1TESTp2') print soup.div() 结果: [p1, p2] 为什么
我是一名优秀的程序员,十分优秀!