Nexus Repository OSS 3.4.0内存泄漏致服务异常,求恢复方案
Nexus Repository Manager OSS 3.4.0 内存泄漏与服务异常恢复求助
部署在虚拟机上的Nexus Repository Manager OSS 3.4.0突发异常:Nexus UI、Docker拉取/推送均超时。初始日志显示JVM垃圾回收时出现OOM,重启服务及虚拟机后仅能正常运行数分钟,随即再次出现超时问题。每次重启后,日志中均出现org.elasticsearch.monitor.jvm相关错误,表明存在内存泄漏。
日志详情
------------------------------------------------- Started Sonatype Nexus OSS 3.4.0-02 ------------------------------------------------- 2023-02-11 05:43:43,849+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.ServerConnector - Started ServerConnector@222517ad{SSL,[ssl, http/1.1]}{0.0.0.0:8082} 2023-02-11 05:43:43,850+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.ServerConnector - Started ServerConnector@6aa47140{SSL,[ssl, http/1.1]}{0.0.0.0:8083} 2023-02-11 05:43:47,997+0000 INFO [quartz-2-thread-2] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Health Check: maven-central' [healthcheck] state change WAITING -> RUNNING 2023-02-11 05:43:49,377+0000 INFO [quartz-2-thread-2] *SYSTEM org.sonatype.nexus.scheduling.internal.TaskSchedulerImpl - Task 'Health Check: maven-central' [healthcheck] scheduled: hourly 2023-02-11 05:43:49,381+0000 INFO [quartz-2-thread-2] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Health Check: maven-central' [healthcheck] state change RUNNING -> WAITING (OK) 2023-02-11 05:46:09,341+0000 INFO [qtp1622059521-199] *UNKNOWN org.apache.shiro.session.mgt.AbstractValidatingSessionManager - Enabling session validation scheduler... 2023-02-11 05:46:09,353+0000 INFO [qtp1622059521-199] *UNKNOWN org.sonatype.nexus.internal.security.anonymous.AnonymousManagerImpl - Loaded configuration: AnonymousConfiguration{enabled=true, userId='anonymous', realmName='NexusAuthenticatingRealm'} 2023-02-11 05:47:33,161+0000 INFO [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][young][215][270] duration [708ms], collections [1]/[1.2s], total [708ms]/[1.9m], memory [8gb]->[7.8gb]/[12gb], all_pools {[young] [0b]->[4mb]/[0b]}{[survivor] [56mb]->[60mb]/[0b]}{[old] [7.9gb]->[7.7gb]/[12gb]} 2023-02-11 05:47:34,426+0000 INFO [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][young][216][271] duration [727ms], collections [1]/[1.2s], total [727ms]/[1.9m], memory [7.8gb]->[7.7gb]/[12gb], all_pools {[young] [4mb]->[0b]/[0b]}{[survivor] [60mb]->[60mb]/[0b]}{[old] [7.7gb]->[7.6gb]/[12gb]} 2023-02-11 05:50:02,078+0000 WARN [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][old][331][1] duration [29.1s], collections [1]/[30.9s], total [29.1s]/[29.1s], memory [11.4gb]->[9.1gb]/[12gb], all_pools {[young] [0b]->[4mb]/[0b]}{[survivor] [32mb]->[0b]/[0b]}{[old] [11.4gb]->[9.1gb]/[12gb]} 2023-02-11 05:50:02,092+0000 INFO [quartz-2-thread-3] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change WAITING -> RUNNING 2023-02-11 05:50:02,106+0000 INFO [quartz-2-thread-3] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change RUNNING -> WAITING (OK) 2023-02-11 05:51:13,155+0000 INFO [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][young][400][466] duration [891ms], collections [1]/[1.3s], total [891ms]/[3.4m], memory [11.5gb]->[11.8gb]/[12gb], all_pools {[young] [128mb]->[0b]/[0b]}{[survivor] [48mb]->[16mb]/[0b]}{[old] [11.3gb]->[11.8gb]/[12gb]} 2023-02-11 05:51:46,711+0000 WARN [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][old][401][2] duration [33.1s], collections [1]/[33.5s], total [33.1s]/[1m], memory [11.8gb]->[10.8gb]/[12gb], all_pools {[young] [0b]->[0b]/[0b]}{[survivor] [16mb]->[0b]/[0b]}{[old] [11.8gb]->[10.8gb]/[12gb]} 2023-02-11 05:52:04,488+0000 WARN [elasticsearch[12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [12DEA86D-AA14EDFA-783CB331-3D44898F-42A9D480] [gc][young][418][486] duration [1.2s], collections [1]/[1.4s], total [1.2s]/[3.5m], memory [11.7gb]->[11.9gb]/[12gb], all_pools {[young] [340mb]->[0b]/[0b]}{[survivor] [40mb]->[4mb]/[0b]}{[old] [11.3gb]->[11.9gb]/[12gb]}
期望目标
- 重启后CPU/内存使用恢复正常
- 执行
service nexus stop时Nexus能优雅关闭
已尝试操作
- 大幅提升主机内存及JVM内存配置为:
-Xms12G -Xmx12G -XX:MaxDirectMemorySize=15G
- 禁用CI流水线及微服务集群的所有部署,确保Nexus无负载
- 在Nexus UI中取消/删除5个重复的仓库重新索引任务
观察到的现象
- 重启后正常运行数分钟就出现超时,Nexus内存占用达100%
- 无法优雅关闭Nexus,只能通过
kill -9 [PID]强制重启 - 日志显示Elasticsearch GC耗尽了所有JVM堆内存
- 多个仓库重新索引任务卡在
Cancelling状态(疑似与NEXUS-13121问题一致)
可行恢复方案
1. 清理卡死的索引任务
针对卡在Cancelling状态的任务,直接操作Nexus内置数据库清理:
- 强制停止Nexus进程:
kill -9 [PID] - 进入Nexus数据存储目录(默认路径:
sonatype-work/nexus3/db) - 使用H2数据库客户端打开
config数据库文件 - 执行SQL删除卡死的索引任务:
DELETE FROM quartz_triggers WHERE SCHED_NAME = 'nexus' AND TRIGGER_NAME LIKE '%reindex%'; DELETE FROM quartz_job_details WHERE SCHED_NAME = 'nexus' AND JOB_NAME LIKE '%reindex%';
- 保存修改后重启Nexus
2. 单独限制Elasticsearch堆内存
Nexus内置Elasticsearch默认内存占比过高,单独分配内存缓解GC压力:
- 编辑Nexus启动配置文件:
nexus/bin/nexus.vmoptions - 添加Elasticsearch内存参数(建议分配2-4G,不超过主机内存50%):
-Delasticsearch.jvm.options=-Xms2G -Xmx2G
3. 临时禁用自动索引
重启后立即登录Nexus UI,关闭所有仓库的自动索引功能:
- 进入每个仓库的配置页面
- 找到「Indexing」选项,取消勾选「Automatically Index New Components」
- 保存配置,待服务稳定后再按需开启
4. 升级Nexus至稳定版本
3.4.0版本存在已知的Elasticsearch内存泄漏及任务管理bug,建议升级到最新OSS稳定版本(如3.60+),升级前务必备份sonatype-work/nexus3数据目录
5. 优化JVM GC配置
调整GC参数提升回收效率,修改nexus.vmoptions中的GC相关配置:
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled
若使用JDK11及以上版本,可替换为ZGC优化:
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
内容的提问来源于stack exchange,提问作者buildwithjz
相关产品推荐
相关产品推荐

