多线程Hibernate应用程序等待锁定ComboPooledDataSource

时间:2017-12-12 12:57:51

标签: java multithreading hibernate c3p0

我有一个尝试写入数据库的多线程应用程序(100个线程)。 我看到写入通过,但速度非常慢。

当我进行线程转储时,我注意到100个线程中有80个正在等待

java.lang.Thread.State: BLOCKED (on object monitor)
    at com.amazon.odin.hibernate.ConnectionPool.getConnection(ConnectionPool.java:143)
    - waiting to lock <0x00000007bdc5cc70> (a com.mchange.v2.c3p0.ComboPooledDataSource)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的连接池只有20个连接,因此线程正在竞争该资源。请注意,如果您的数据库无法处理100的连接数,则无法提供帮助。然后,您只是将竞争从连接池移动到数据库资源。

但是,如果您的数据库服务器确实有足够的果汁,您可以考虑增加池中的最大连接数,并查看它如何影响吞吐量。