You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Payara中设置EJB默认并发访问超时及监控死锁?

在Payara中配置EJB默认并发访问超时及死锁排查方案

一、配置EJB默认并发访问超时

Payara支持全局设置未标注@AccessTimeout的EJB默认访问超时,有两种可行方式:

1. 通过asadmin命令设置

执行以下命令指定默认超时时间(示例为30秒,可按需调整):

set configs.config.server-config.ejb-container.descriptor-defaults.access-timeout-in-seconds=30

执行完成后重启Payara服务器,配置即可生效,超时后会自动抛出jakarta.ejb.ConcurrentAccessException。

2. 直接修改domain.xml配置

打开Payara域目录下的config/domain.xml,找到<ejb-container>节点下的<descriptor-defaults>,添加或修改access-timeout-in-seconds属性:

<ejb-container>
  <descriptor-defaults access-timeout-in-seconds="30"/>
  <!-- 其他原有配置 -->
</ejb-container>

保存后重启服务器,全局默认超时设置立即生效。

二、开发环境快速识别EJB死锁

如果需要快速定位死锁问题,可通过以下几种方式:

  • Payara管理控制台线程分析
    登录管理控制台(默认地址http://localhost:4848),进入「服务器 > 监控 > 线程池」查看阻塞线程,或通过「诊断 > 线程转储」生成完整线程快照,分析线程锁的持有与等待关系。

  • 开启EJB容器调试日志
    在domain.xml中调整日志级别,开启EJB容器的调试日志:

    <logger name="jakarta.ejb.container" level="FINE"/>
    

    服务器日志会输出EJB锁的获取、等待等细节,帮助追踪死锁发生的上下文。

  • JDK工具分析线程状态

    • 使用jstack生成线程转储:
      jstack [Payara进程ID] > thread_dump.txt
      
      打开文件搜索BLOCKED状态线程,结合堆栈信息判断是否存在循环等待锁的死锁场景。
    • 使用jconsole或visualvm等可视化工具连接Payara进程,实时查看线程锁的持有情况,直观定位死锁。

内容的提问来源于stack exchange,提问作者NotGaeL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:17