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

Artifactory启动时与PostgreSQL数据库连接异常故障求助

Artifactory启动失败:PostgreSQL锁堆积与重复键冲突问题解决

核心问题定位

从日志和数据库状态可明确:

  • 重复键约束冲突:access_configs表中shared.security.joinKey记录已存在,但Artifactory初始化时仍尝试插入,触发唯一约束错误ERROR: duplicate key value violates unique constraint "access_configs_pk"。
  • 数据库锁堆积:冲突发生后,后续的UPDATE access_configs和UPDATE artifactory_servers查询因锁等待无法执行,导致事务堆积。
  • 连接超时:HikariCP数据库连接等待锁释放超时,被标记为broken,最终引发Artifactory启动失败的SocketTimeoutException。

排查步骤

  • 检查是否有多个Artifactory实例同时启动:HA集群环境下,多节点同时执行初始化会争抢同一数据库资源,引发锁冲突。
  • 查看access_configs表数据:确认shared.security.joinKey记录是否存在,是否为异常停机留下的脏数据。
  • 查询数据库锁状态:执行PostgreSQL命令查看阻塞的锁和会话:
    -- 查看未授予的锁
    SELECT * FROM pg_locks WHERE NOT granted;
    -- 查看活跃会话,找出阻塞进程
    SELECT pid, query, state FROM pg_stat_activity WHERE state = 'idle in transaction';
    

修复方案

单节点场景

  1. 停止Artifactory服务。
  2. 登录PostgreSQL数据库,清理冲突脏数据:
    DELETE FROM access_configs WHERE config_name = 'shared.security.joinKey';
    
  3. 杀掉堆积的阻塞事务:
    -- 替换pid为pg_stat_activity中找到的阻塞进程ID
    SELECT pg_terminate_backend(pid);
    
  4. 重新启动Artifactory,观察初始化日志是否正常。

HA集群场景

  1. 停止所有Artifactory节点。
  2. 选择单个节点启动,等待其完成数据库初始化(日志显示PostDbSchemaInitializationManager.init执行完成)。
  3. 初始化完成后,再依次启动其他集群节点,此时节点会读取已存在的配置,不会重复执行插入操作。
  4. 检查集群节点时间同步状态:节点间时间差过大会导致心跳和锁逻辑异常,需确保所有节点NTP同步正常。

临时缓解(非根治)

若需快速恢复,可适当调大Artifactory数据库连接池超时参数(在artifactory.system.properties中):

# 调大连接超时时间,单位毫秒
db.connectionTimeout=30000
db.validationTimeout=10000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:42