2013-09-16 4 views
3

Некоторое время назад мы переместили одно из наших веб-приложений с Resin и Java 6 на VMware vFabric tc Server и Java 7. Это также включало перемещение всех источников данных JNDI из реализации Resin для Oracle UCP. Я заметил, что использование моего процессора чрезвычайно велико, когда я запускаю приложение локально. После присоединения VisualVM к Тк я обнаружил, что это Oracle UCP, который потребляет мой процессор:Использование высокопроизводительного процессора Oracle UCP на сервере Java 1.7 + TC

enter image description here

Моя локальная конфигурация является: Windows 7х64, Java 1.7.0_25x32 (JDK) и VFabric дц 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"/> 

Интересно, что на Prod коробки все работает отлично. Я не знаю точную конфигурацию, но на них установлены Fedora или CentOS. Hotspot 7.

Я пробовал стандартную реализацию данных Tomcat, но в моем случае это не работает: соединение между моей локальной машиной и кластером DB очень неустойчив, поэтому для меня жизненно важно иметь автоматическое восстановление и балансировку нагрузки. Кроме того, я хочу, чтобы моя локальная конфигурация была похожа на prod, поэтому использование другого пула нежелательно.

Возможно, кто-то столкнулся с той же проблемой и знает решение? Может быть, некоторая JVM arg или родная библиотека пропущена?

+1

После копания в ОГП исходного кода с декомпилятор, мы обнаружили потенциальную проблему, которая вызывает и бесконечный цикл. Черт побери! – madhead

ответ

1

Просьба рассмотреть, чтобы уменьшить тайм-аут секунд ниже параметров, так как он может быть одним из факторов, способствующих

1) inactiveConnectionTimeout

2) abandonedConnectionTimeout

больше времени, проведенного в режиме ожидания соединения (оба заимствованы и доступны) потребует больше памяти для хранения соединений.

С использованием используемого веб-приложения это может косвенно приводить к увеличению использования ЦП из-за большого использования памяти.

Вы можете найти ссылки ниже для получения дополнительной информации

Optimizing Universal Connection Pool Behavior

CPU usage VS RAM