【问题标题】:Jboss 7.1 Database Query HangsJboss 7.1 数据库查询挂起
【发布时间】: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&amp;cacheServerConfiguration=true&amp;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 的问题。

标签: jndi jboss7.x


【解决方案1】:

虽然我对您的问题没有明确的解决方案,但您可以做以下几件事来进一步隔离问题:

  • 监控数据库性能和吞吐量。由于您提到该问题仅发生在生产中,因此可能与负载有关。也许您的事务专门锁定了太多对象太长时间,因此当使用负载开始达到峰值时,下一个事务必须等到前一个事务首先完成
  • 监控服务器硬件,下次出现“挂起”时,请注意 CPU/内存/磁盘使用率是否达到峰值
  • 观察“挂起”期间数据库上发生的其他活动,如果完成了任何繁重的工作,这可能会显着降低您的应用程序速度
  • 针对类似的生产负载在您的测试/暂存环境中执行负载测试。如果您可以重现“挂起”症状,那么您的代码可能存在可伸缩性问题

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2011-11-22
    • 2013-01-05
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多