Hibernate démarrage très lent

Pour une raison quelconque, le démarrage de mon application hibernate est unbarrably lent. (jusqu'à 2 min)
J'ai été de penser que la c3p0 configuration est simplement faux (une question relative à la) mais l'étude des journaux de montre, qu'il n'y a pas d'activité juste après la connexion au serveur est établie. Aussi, en utilisant le haut-dans les bureaux de fonctionnalités d'Hibernate montre le même résultat.

Ici est un extrait de l'journaux:

20:06:51,248 DEBUG BasicResourcePool:422 - decremented pending_acquires: 0
20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:06:51,273 DEBUG JdbcServicesImpl:121 - Database ->
name : PostgreSQL
version : 9.1.6
major : 9
minor : 1
20:06:51,274 DEBUG JdbcServicesImpl:127 - Driver ->
name : PostgreSQL Native Driver
version : PostgreSQL 9.2 JDBC4 (build 1002)
major : 9
minor : 2
20:06:51,274 DEBUG JdbcServicesImpl:133 - JDBC version : 4.0 ##### HANGS FOR 2 MINUTES  ON THIS LINE #####
20:08:14,727  INFO Dialect:123 - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
20:08:14,736  INFO LobCreatorBuilder:120 - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:08:14,883 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0

(Veuillez garder à l'esprit le commentaire##.)

J'ai aussi essayé une ancienne Postgres Pilote JDBC avec pas de chance que ce soit.

De la connexion à une Base de données locale fonctionne très bien. La connexion est établie immédiatement et je peux interroger la base de données. Cette distance db est un Heroku dev instance. Je l'ai essayé avec une autre télécommande. Même résultat.

Je suis à court d'idées de ce que je peux vérifier maintenant de se débarrasser de cette gêne. Toute aide serait grandement appréciée.

Peut-être mon hibernate.cfg.xml est utile:

http://www.hibernate.org/dtd/hibernate-

configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url"/>
<property name="connection.default_schema"/>
<property name="connection.username"/>
<property name="connection.password"/> 
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="current_session_context_class">thread</property>            
<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquireRetryDelay">500</property>
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="core.entities.Exam" />
<mapping class="core.entities.Examination" />
...
</session-factory>
</hibernate-configuration>

EDIT: j'ai essayé de trouver la raison de ce retard par les journaux et le profilage, mais ont été largement échoué. (Je ne suis pas aussi avancé dans ce domaine.) En fin de compte je l'ai fait aller avec essayer et échouer et a changé ma db MySQL distant exemple pour vérifier si une différence apparaît. Il s'avère, que la connexion est établie presque immédiatement.

Essayez un profiler, sinon vous êtes juste de deviner pourquoi c'est si lent.
Juste une intuition, mais vous pourriez vouloir vérifier votre réseau, DNS peut-être? Essayez d'utiliser l'IP de votre serveur à la place du nom du serveur. Ça sonne un peu comme il est en attente sur un délai d'attente.
Ouais, ça sent comme les problèmes de réseau

OriginalL'auteur bentrm | 2013-01-21