【问题标题】:DB use an excessive amount of CPU - 95%DB 使用过多的 CPU - 95%
【发布时间】:2012-11-06 12:09:55
【问题描述】:

我在我的应用程序中使用 Spring MVC + hibernate。应用服务器是 IBM WebSphere v7。在重新启动和重新启动应用程序后,Db2syscs 进程使 CPU 使用率达到 99%,并消耗大约 1,034,352K 的内存使用量。这大约需要 10~15 分钟。我尝试增加分配给 DB2 的堆大小,但没有任何区别。

编辑

这些是我在 spring 配置文件中的休眠属性。添加缓存、池属性会有影响吗?

<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.datasource">jdbc/logincfg</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory
</prop>
<prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
</prop>

【问题讨论】:

  • 您的数据库大小是多少?对于一个合理大小的数据库来说,1GB 的数据库服务器内存似乎相当少。
  • 会不会是长查询问题?缺少一些索引或类似的东西?
  • @Matthew Scharley:数据库没有那么大。数据库中有 9 个表。
  • @Alexandre Lavoie:我使用的是 hibernate,所以手工编写的查询很少。
  • 当然,但是 Hibernate 不会在表中创建索引,对吧? (我从来没有使用过 Hibernate 来实际创建表)我将 Hibernate 与 MySQL 一起使用,并手动创建索引来优化连接和位置!

标签: java database hibernate spring-mvc db2


【解决方案1】:

如果您在 linux 上运行,请尝试使用 db2top 等监视器来确定哪个查询正在占用您的 CPU。

 db2top -d <your database name>   

【讨论】:

  • 我使用的是windows server 2003
【解决方案2】:

WebSphere 本身处理其数据源的所有池和缓存级别。所有与 JDBC 相关的配置都可以通过 WebSphere 管理控制台 执行。尝试使用connection pool datasource instead of XA datasource。另请检查heuristic hazard in server configuration。这些将减少 CPU 的负载。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多