Linux環境でTomcatを使用して、Java WebアプリケーションでHibernateとSpringをマージするプロジェクトを行っています。Mysql の 8 時間のタイムアウトの問題により、C3P0 を使用して Mysql データベースとの接続プールを管理したいと考えています。しかし、それを使用すると、多数のスレッドが作成されます。リクエストごとに、メモリの増加とその種類のスレッドを示すメモリステータスでそれらすべてを印刷したため、私はそれを理解しました:
- 名前: C3P0PooledConnectionPoolManager[identityToken->1hged7o8r13kpj7n1h3ycia|39c446]-HelperThread-#0 デーモン: 真のグループ! メイングループの親: システムが稼働中: true 中断: false
- 名前: C3P0PooledConnectionPoolManager[identityToken->1hged7o8r13kpj7n1h3ycia|17ec0e8]-AdminTaskTimer デーモン: 真のグループ! メイングループの親: システムが稼働中: true 中断: false
十分な時間が経過すると、これらのような 500 を超えるスレッドを生成できます。
ここに私の Hibernate.cfg.xml があります:
<property name="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">5</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.timeout">5</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myBase</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.default_schema">myProject</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="show_sql">false</property>
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
C3P0 プロパティ ファイルも追加しようとしましたが、ヘルパー スレッド数を減らす以外は、使用されていないスレッドは削除されません。
c3p0.maxStatements=5
c3p0.maxIdleTime=10
c3p0.numHelperThreads=1
c3p0.testConnectionOnCheckout=true
c3p0.preferredTestQuery=SELECT 1
c3p0.initialPoolSize=1
c3p0.minPoolSize=1
c3p0.maxPoolSize=10
c3p0.acquireIncrement=1
c3p0.idleConnectionTestPeriod=1
なぜこれが起こるのか、この問題を解決する方法を知っている人はいますか?
どうもありがとう。