- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个使用的 spring 项目Spring
+ Spring Data
+ Hibernate
+ c3p0
一切正常,直到最后几个版本。我们开始看到很多的INFO GooGooStatementCache:441
在我们的日志中。此外,在我们的服务器端出现一些内存问题之后。我们开始对我们的 Java 内存堆进行一些分析。似乎在我们得到很多 INFO GooGooStatementCache:441
的所有版本中都是如此我们有严重的内存泄漏。 com.mysql.jdbc.JDBC4Connection
不会免费。因此,我们有许多连接保持打开状态。
我们怀疑从 hibernate 3.6.3.Final
的变化( hibernate-entitymanager
) 到 hibernate 3.0.Final
导致这些问题。
有其他人经历过这样的事情吗?
谢谢,
阿隆
编辑:
之间切换:
<!-- <jpa.version>2.0.0</jpa.version> -->
<hibernate.version>4.3.0-Final</hibernate.version>
<hibernate.entitymanager.version>4.3.0.Final</hibernate.entitymanager.version>
<!-- <hibernate.jpa-api.version>2.0-cr-1</hibernate.jpa-api.version> -->
<jpa.version>2.0.0</jpa.version>
<hibernate.version>3.5.6-Final</hibernate.version>
<dependency>
<groupId>org.hibernate.java-persistence</groupId>
<artifactId>jpa-api</artifactId>
<version>${hibernate.jpa-api.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.entitymanager.version}</version>
<scope>compile</scope>
</dependency>
<!-- Hibernate and JPA -->
<!-- seems like we get jppa api from hibernate-entitymanager -->
<!-- <dependency> -->
<!-- <groupId>org.hibernate.java-persistence</groupId> -->
<!-- <artifactId>jpa-api</artifactId> -->
<!-- <version>${hibernate.jpa-api.version}</version> -->
<!-- <scope>compile</scope> -->
<!-- </dependency> -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.entitymanager.version}</version>
<scope>compile</scope>
</dependency>
INFO GooGooStatementCache:441 - Multiply prepared statement!
问题
c3p0
和新
hibernate
<!-- Declare a datasource that has pooling capabilities-->
<bean id="jpaDataSource" 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="60"
p:maxPoolSize="100"
p:maxStatements="50"
p:minPoolSize="10" />
<!-- Declare a JPA entityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:persistenceXmlLocation="classpath*:META-INF/persistence.xml"
p:persistenceUnitName="hibernatePersistenceUnit"
p:dataSource-ref="jpaDataSource"
p:jpaVendorAdapter-ref="hibernateVendor"/>
<!-- Specify our ORM vendor -->
<bean id="hibernateVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="false"/>
<!-- Declare a transaction manager-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">
<persistence-unit name="hibernatePersistenceUnit"
transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value=${show.sql} />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
</properties>
<mapping-file>META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
hibernate
和
c3p0
和
spring
?使用
hibernate-c3p0
打包或添加
c3p0
打包到pom?
最佳答案
因此,我无法解释为什么您会在较新版本的 Hibernate 中看到更多这种情况,但是您看到的消息意味着您的应用程序正在尝试准备一个 PreparedStatement,它已经由同一个数据库准备和缓存联系。但是缓存的Statement不能使用,因为还在使用中,还没有被close()ed。因此,正在准备同一声明的新副本。 (缓存将保存两个副本,以防您经常同时重用该语句。)
从理论上讲,在某些情况下,这可能正是您打算执行的操作。例如,在遍历展平到数据库表中的递归结构时,您可能会重用具有不同参数的相同查询来向下钻取级别,同时顶级查询保持打开状态。
不过,在实践中这种情况很少见。通常,如果您收到此消息,则可能意味着您的应用程序没有及时关闭 () 语句。根据你的描述,听起来你也可能有连接泄漏,虽然你没有报告通常的结果,但当池达到 maxPoolSize
时应用程序挂起. (您没有报告太多关于您的 c3p0 配置的信息;也许您将 maxPoolSize
设置得非常大,并且在池耗尽之前遇到了内存问题。)
你可能会尝试一些事情:
1) 检查您是否有连接泄漏。见 here
2) 简化问题:通过关闭语句缓存并比较行为,查看问题是否仅限于语句缓存。设置 c3p0 参数 maxStatements
和 maxStatementsPerConnection
都为零。
关于spring - Hibernate 4.3-final 是否会导致 GooGooStatementCache 乘以准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574541/
创建一个“海盗对话”,可以选择左手或右手。我希望它对“左”和“右”的不同拼写做出积极的回答(正如您将在代码中看到的那样),但是,当我为所有非“右”或“左”的输入添加最终的“else”代码时,它给了我一
With 语句 对一个对象执行一系列的语句。 With object statements End With 参数 object 必需的部分
While...Wend 语句 当指定的条件为 True 时,执行一系列的语句。 While condition  ; Version [stat
所以我正在处理的代码有一个小问题。 while True: r = input("Line: ") n = r.split() if r == " ":
我有一个对象数组: var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number"
int main() { int f=fun(); ... } int fun() { return 1; return 2; } 在上面的程序中,当从main函数中调用一个
我的项目中有很多 if 语句、嵌套 if 语句和 if-else 语句,我正在考虑将它们更改为 switch 语句。其中一些将具有嵌套的 switch 语句。我知道就编译而言,switch 语句通常更
Rem 语句 包含程序中的解释性注释。 Rem comment 或 ' comment comment 参数是需要包含的注释文本。在 Rem 关键字和 comment 之间应有一个空格。
ReDim 语句 在过程级中声明动态数组变量并分配或重新分配存储空间。 ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Randomize 语句 初始化随机数生成器。 Randomize [number] number 参数可以是任何有效的数值表达式。 说明 Randomize 使用 number 参数初始
Public 语句 定义公有变量并分配存储空间。在 Class 块中定义私有变量。 Public varname[([subscripts])][, varname[([subscripts])
Sub 语句 声明 Sub 过程的名称、参数以及构成其主体的代码。 [Public [Default]| Private] Sub name [( arglist )]
Set 语句 将对象引用赋给一个variable或property,或者将对象引用与事件关联。 Set objectvar = {objectexpression | New classname
我有这个代码块,有时第一个 if 语句先运行,有时第二个 if 语句先运行。我不确定为什么会这样,因为我认为 javascript 是同步的。 for (let i = 0; i < dataObje
这是一个 javascript 代码,我想把它写成这样:如果此人回答是,则回复“那很酷”,如果此人回答否,则回复“我会让你开心”,如果此人回答的问题包含"is"或“否”,请说“仅键入”是或否,没有任何
这是我的任务,我尝试仅使用简短的 if 语句来完成此任务,我得到的唯一错误是使用“(0.5<=ratio<2 )”,除此之外,构造正确吗? Scanner scn = new Scanner(
有没有办法在 select 语句中使用 if 语句? 我不能在这个中使用 Case 语句。实际上我正在使用 iReport 并且我有一个参数。我想要做的是,如果用户没有输入某个参数,它将选择所有实例。
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: If vs. Switch Speed 我将以 C++ 为例,但我要问的问题不是针对特定语言的。我的意思是一
Property Set 语句 在 Class 块中,声明名称、参数和代码,这些构成了将引用设置到对象的 Property 过程的主体。 [Public | Private] Pro
Property Let 语句 在 Class 块中,声明名称、参数和代码等,它们构成了赋值(设置)的 Property 过程的主体。 [Public | Private] Prop
我是一名优秀的程序员,十分优秀!