少し前に、Web アプリの 1 つを 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 standard 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"/>
製品ボックスですべてが正常に機能することは興味深いことです。正確な構成はわかりませんが、Fedora または CentOS と Hotspot 7 がインストールされています。
標準の Tomcat データソースの実装を試しましたが、私の場合はうまくいきません。ローカル マシンと DB クラスター間の接続が非常に不安定であるため、自動回復と負荷分散が不可欠です。また、ローカル構成を prod と同様にしたいので、別のプールを使用することは望ましくありません。
誰かが同じ問題に直面し、解決策を知っているのではないでしょうか? JVM引数またはネイティブライブラリが欠落している可能性がありますか?