我有一个尝试写入数据库的多线程应用程序(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)
我该如何解决这个问题?
答案 0 :(得分:0)
您的连接池只有20
个连接,因此线程正在竞争该资源。请注意,如果您的数据库无法处理100
的连接数,则无法提供帮助。然后,您只是将竞争从连接池移动到数据库资源。
但是,如果您的数据库服务器确实有足够的果汁,您可以考虑增加池中的最大连接数,并查看它如何影响吞吐量。