2015-07-20 143 views
0

我正在爲我目前正在使用的應用程序執行基準測試。經過很多迭代後,我們可以識別出組件的時間。代理服務器org.springframework.orm.jpa.SharedEntityManagerCreator:invoke:289

它是一個基於Web的應用程序,使用Spring Data JPA和hibernate作爲持久性提供程序。

從監視工具中,我們發現類Proxy For org.springframework.orm.jpa.SharedEntityManagerCreator:invoke:289是運行更多數量(2000個)併發線程所耗費的時間。

請讓我知道可能的原因和解決方案。

以下是我與 彈簧工作版本 - 4.1.7.RELEASE 休眠 - 4.2.15.Final 春數據JPA - 1.8.0.RELEASE 下面是向下鑽取調用圖

Drill Down Call Graph

+0

2000線程聽起來相當多?這個數字如此之高的任何原因? –

+0

執行性能測試並查找5000個併發用戶。 – Samy

+0

此外,瞭解DataSource的池設置會很有趣。當5000嘗試創建一個事務性的EntityManager,並試圖獲取數據庫連接時,可能會最大限度地提高連接池的速度,然後讓線程停滯。 –

回答

1

SharedEntityManagerCreator正在爲該特定線程創建一個新的EntityManager實例。如果您使用JPA,那麼根據spec的定義,這是EntityManager應該發生的事情,而不是線程安全的。

您發佈的行號意味着它是EntityManager實例的反射方法調用花費了那麼多時間。所以我會檢查實際被調用的方法,它做了什麼以及爲什麼需要這麼長時間。 SharedEntityManagerCreator基本上只是轉發呼叫。

+0

同意並感謝您的信息。但是爲什麼創建SharedEntityManagerCreator的時間會隨着線程數量的增加而不斷增加。 1000個併發線程需要大約一分鐘的時間。 – Samy

+0

你能否分析哪部分通話需要這麼長時間?你使用的是哪個版本的Spring Framework? –

+0

春季版 - 4.1.7.RELEASE – Samy