【发布时间】:2012-12-24 02:47:23
【问题描述】:
我之前使用的是 Jboss 4.2.2,最近我在 linux 机器上安装了 Jboss 7.1。它在登台服务器上运行良好,但我在生产中遇到了奇怪的问题。
启动几个小时后,我的数据库查询开始挂起。结果没有从数据库中返回。我正在使用standalone.xml 中定义的JNDI。
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:/MyDatabaseDS" pool-name="MyDatabaseDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://host:3306/database?zeroDateTimeBehavior=convertToNull&cacheServerConfiguration=true&useConfigs=maxPerformance</connection-url>
<driver>mysql</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>user_name</user-name>
<password>password</password>
</security>
<timeout>
<blocking-timeout-millis>50000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
</datasource>
<drivers>
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
请帮忙。
【问题讨论】:
-
JBoss 日志说什么? MySQL日志?系统“消息”日志?发生挂起时,您可以对 mysql 进行临时查询吗? JBoss 本身是否似乎挂起? JVM呢?您是否尝试过在 JConsole 下检查它?来自 JMX 控制台?
-
我有我的日志,他们打印了查询所用的时间。它缓慢增加,7-8 小时后上升到 5 秒,只需从只有一行的表中进行简单选择。之后,日志仅显示命中数据库之前的语句。这显然意味着结果不会回来。 Mysql 日志什么也没说,因为同一个应用程序在 JBoss4.2 中运行良好。
-
您能否检查 MySQL 数据库并检查应用程序卡住时那里发生的情况?一个很好的起点是检查 MySQL Administrator Tool 的“Server Connections”页面。有什么联系吗?如果有,他们有什么活动?预期的查询是否正在运行?
-
另外,这可能与内存慢慢耗尽有关。在重新启动 JBoss 之前和之后(反之亦然),使用 top 检查可用内存量。比较使用的内存量,看看哪个进程占用它,如果有的话。
-
一切看起来都很好。无法检查内存快照,因为我不知道它何时会重新启动。也可能是 Jboss Threads 的问题。