gpt4 book ai didi

java - EJB 方法在每次调用后需要更多时间返回

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:14 26 4
gpt4 key购买 nike

我正在观察异常行为,我想了解正在发生的事情。

想象一个简单的设置。

首先,我有一个只返回一些东西的无状态 bean:

@Stateless
public class SimpleService{
private Map<String, String> map;

@PostConstruct
public init(){
map = new HashMap<>();
}

public Map<String,String> getMap(){
return map;
}
}

然后我有另一个做一些处理的无状态bean

@Stateless
public class ProcessService{

private static final Logger log = LoggerFactory.getLogger(ProcessService.class);
private static final int MAX = 2000;

@Inject
private SimpleService simpleService;

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void process(){
final long start = System.currentTimeMillis();
for(int i=0; i<MAX; i++){
simpleService.getMap();
}
final long end = System.currentTimeMillis();
log.info(MessageFormat.format("Process took {0} ms", end - start));
}
}

然后我有一个简单的 CDI bean 来调用 process 方法。

结果:

当我连续多次调用process方法时,处理时间不断增加:

Process took 900 ms
Process took 1,100 ms
Process took 1,200 ms
Process took 1,400 ms

并且每次调用该方法时它都会继续上升。

这怎么解释?

我正在使用 Java JDK 1.7.0_25 和 JBOSS EAP 6.1。

编辑

顺便说一句,“重置”该方法的处理时间的唯一方法是重新启动服务器。

最佳答案

我已经使用 WildFly 8.1.0.Final 进行了测试,我得到以下结果:

Process took 900 ms
Process took 600 ms
Process took 400 ms
Process took 300 ms
Process took 130ms
Process took 100ms

然后它在 90 毫秒左右稳定下来。

所以我认为我们可以安全地假设原始问题是 JBoss AS 7 中的一个错误,该错误已在 WildFly 8.1 中修复。除了修复之外,他们甚至引入了一些优化!

编辑!

我向大家道歉,我做了一个错误的诊断。此错误与 JBoss 的版本无关,但是由 JRebel 引起的。

当我下载 Wildfly 时,我没有使用附加的 JRebel 代理在 Debug模式下运行它(我一直在使用 EAP 6.1)。如果我在没有 JRebel 的情况下启动 JBoss EAP 6.1,问题就不会发生。

我对 JRebel 太习惯了,我忘了我已经打开它了!

我会向 JRebel 团队提出问题。

编辑 2

JRebel 团队调查并能够重现该缺陷。它已在夜间构建中修复,并将在下一个版本中修复(2014 年 8 月/9 月到期)

关于java - EJB 方法在每次调用后需要更多时间返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com