![](/img/trans.png)
[英]Does DBCP connection pool connection.close() return connection to pool
[英]Blocking on DBCP connection pool (open and close connection). Is database connection pooling in OpenEJB pluggable?
我們在Tomcat上使用OpenEJB(用於在JBoss,Weblogic等上運行)。 在運行負載測試時,我們在處理JMS消息(隊列)時會遇到嚴重的性能問題。 問題僅限於阻止數據庫連接池獲取或釋放與該池的連接。 阻塞阻止並發MDB實例(線程)運行,因此性能遭受10倍甚至更糟的影響。 用於在應用程序服務器上運行相同的代碼(及其各自的連接池實現),完全沒有阻塞。
線程阻塞的示例:
Name: JMS Resource Adapter-worker-23
State: BLOCKED on org.apache.commons.pool.impl.GenericObjectPool@1ea6b4a owned by: JMS Resource Adapter-worker-19
Total blocked: 18,426 Total waited: 0
Stack trace:
org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:916)
org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:91)
- locked org.apache.commons.dbcp.PoolableConnection@1bcba8
org.apache.commons.dbcp.managed.ManagedConnection.close(ManagedConnection.java:147)
com.xxxxx.persistence.DbHelper.closeConnection(DbHelper.java:290)
....
幾個問題。
以防萬一,這就是我們在OpenEJB(openejb.xml)中定義數據源的方式:
<Resource id="MyDataSource" type="DataSource">
JdbcDriver oracle.jdbc.driver.OracleDriver
JdbcUrl ${oracle.jdbc}
UserName ${oracle.user}
Password ${oracle.password}
JtaManaged true
InitialSize 5
MaxActive 30
ValidationQuery SELECT 1 FROM DUAL
TestOnBorrow true
</Resource>
我的2克拉...
1-是否有任何DBCP配置可以解決阻塞問題?
盡管我在文檔中看不到它,但我認為Resource節點中還應該有一個名為“ WhenExaustedAction”的設置屬性,該屬性可以采用值“ GROW”(值2),而不是“ BLOCK”(值1)或“ FAIL”(值0)。 這直接來自Pools的常見問題。 Hibernate和Cayenne均使用此DBCP設置。 雖然不了解OpenEJB。
不必說,僅當所有連接都已完好地關閉(有時很難保證)時,這才起作用。 然后,您可能會通過JMX看到在高峰活動時間需要多少個連接,然后可以將maxActive設置為根據這些度量得出的更高值。
2-DBCP連接池實現可以在OpenEJB中替換嗎? 用另一個庫替換它有多容易(困難)?
不好意思 可以想象是的。 也許DBCP允許另一個連接池管理器。
更新:只看了一下代碼,似乎DBCP是連接池的唯一選擇。
順便說一句,我已經看到了whenExhaustedAction設置。 openejb.xml不支持。
但是,由於您使用的是Oracle數據庫,因此仍然只有一個選擇。
您可以嘗試的一件事是使用Oracle隱式連接緩存(假定版本為10g),並為DBCP保留任意數量的“足夠”連接。 為此,您需要在openejb.xml資源塊中配置ConnectionProperties
屬性,並使用Oracle JDBC連接屬性。 那就是connectionCachingEnabled=true
,至少是connectionCacheName
和connectionCacheProperties
。 這樣,我將誘使DBCP相信它正在完成真正的工作,並且實際上使用了Oracle的池化機制。 這也意味着對DBCP承擔很少的風險,從而可以更加自由地調整maxActive設置的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.