3

前段时间,我们将我们的一个 Web 应用程序从 Resin 和 Java 6 迁移到了 VMware vFabric tc Server 和 Java 7。这还包括将所有 JNDI 数据源从 Resin 实现迁移到 Oracle UCP。当我在本地运行应用程序时,我注意到我的 CPU 使用率非常高。将 VisualVM 附加到 tc 后,我发现消耗我的 CPU 的是 Oracle UCP:

在此处输入图像描述

我的本地配置是:Windows 7x64、Java 1.7.0_25x32 (JDK) 和 vFabric tc Server 标准 2.7.0.RELEASE。这是我在以下配置数据源的方式context.xml

  <WatchedResource>WEB-INF/web.xml</WatchedResource>

  <Resource name="jdbc/oracle"
            auth="Container"
            factory="oracle.ucp.jdbc.PoolDataSourceImpl"
            type="oracle.ucp.jdbc.PoolDataSourceImpl"
            connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
            url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=h1.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=h2.com)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SERVICENAME)))"
            user="user"
            password="password"
            minPoolSize="0"
            initialPoolSize="1"
            maxPoolSize="50"
            ONSConfiguration="nodes=h1:6200,h2:6200"
            connectionWaitTimeout="60"
            inactiveConnectionTimeout="900"
            abandonedConnectionTimeout="900"
            fastConnectionFailoverEnabled="false"
            validateConnectionOnBorrow="true"
            connectionPoolName="NAME"/>

有趣的是,在产品盒上一切正常。我不知道确切的配置,但我们在它们和 Hotspot 7 上安装了 Fedora 或 CentOS。

我已经尝试过标准的 Tomcat 数据源实现,但在我的情况下效果不佳:我的本地计算机和数据库集群之间的连接非常不稳定,因此自动恢复和负载平衡对我来说至关重要。另外,我希望我的本地配置类似于 prod,因此不希望使用另一个池。

也许有人面临同样的问题并知道解决方案?也许错过了一些 JVM arg 或本机库?

4

1 回答 1

1

请考虑减少以下参数的超时秒数,因为它可能是促成因素之一

1)非活动连接超时

2)放弃连接超时

在空闲连接(借用和可用)上花费的更多时间将需要更多内存来保存连接。

在使用 Web 应用程序时,由于内存使用率高,这可能会间接导致使用更多 CPU。

请找到以下链接以获取更多信息

优化通用连接池行为

CPU 使用率 VS RAM

于 2013-09-29T15:15:44.983 回答