2015-07-20 79 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