Ubuntu服务器Jenkins 8080无法连接+autovacuum进程CPU占满求助
解决方案步骤
1. 先确认Jenkins的运行状态与核心日志
- 检查Jenkins服务状态,确认是否真的启动成功:
如果显示systemctl status jenkinsfailed或者activating,说明服务启动失败,重点看日志里的报错信息。 - 查看Jenkins启动日志,定位启动阶段的问题:
重点关注数据库连接失败、插件加载错误、端口绑定失败这类关键词。tail -n 50 /var/log/jenkins/jenkins.log
2. 处理PostgreSQL autovacuum高CPU问题
autovacuum是PostgreSQL的自动清理进程,占满CPU通常意味着数据库中有大量死元组(比如Jenkins频繁创建/删除流水线、插件数据导致),或者表膨胀严重:
- 先确认PostgreSQL服务状态:
systemctl status postgresql - 查看PostgreSQL日志,定位autovacuum针对的表:
日志里会显示tail -n 50 /var/log/postgresql/postgresql-*-main.logautovacuum: processing table "jenkins_db.table_name",找到对应的表。 - 临时降低autovacuum优先级,缓解CPU占用(立即生效,无需重启PostgreSQL):
psql -U <jenkins_db_user> -d <jenkins_database> -c "ALTER SYSTEM SET autovacuum_naptime = '60s'; ALTER SYSTEM SET autovacuum_vacuum_cost_delay = '20ms'; SELECT pg_reload_conf();" - 手动清理死元组较多的表(低峰期执行,会锁表):
先查询死元组占比高的表:
对查出的表执行清理:psql -U <jenkins_db_user> -d <jenkins_database> -c "SELECT relname, n_live_tup, n_dead_tup FROM pg_stat_user_tables WHERE n_dead_tup > n_live_tup;"psql -U <jenkins_db_user> -d <jenkins_database> -c "VACUUM FULL ANALYZE <problematic_table>;"
3. 排查8080端口访问问题
- 确认8080端口是否被Jenkins监听:
如果没有输出,说明Jenkins未成功绑定端口,回到第一步看启动日志找原因;如果有其他进程占用,用ss -tulpn | grep 8080lsof -i :8080定位并处理。 - 检查Jenkins配置文件,确认端口和绑定IP:
编辑/etc/default/jenkins,查看HTTP_PORT是否为8080,以及HTTP_HOST是否设置为0.0.0.0(允许外部访问),如果是127.0.0.1则只能本地访问。
4. 排查插件与流水线的影响
因为问题出在安装插件、构建流水线之后,大概率是插件冲突或流水线导致的数据库负载过高:
- 以安全模式启动Jenkins,只加载核心插件:
如果此时能正常访问8080,说明是最近安装的插件导致问题,逐个禁用插件排查。systemctl stop jenkins jenkins --enable-future-java --safe-mode - 检查流水线历史,是否有大量重复构建、频繁操作资源的步骤,这类操作会快速产生数据库死元组,触发autovacuum持续运行。
5. 系统层面兜底排查
- 检查服务器资源使用:
内存耗尽可能导致OOM killer杀死Jenkins进程,磁盘满则会导致Jenkins/PostgreSQL无法写入数据。top # 看CPU、内存占用 free -h # 确认内存是否耗尽 df -h # 检查磁盘是否满额 - 查看系统日志,找系统级错误:
关注tail -n 50 /var/log/syslogOut of memory、killed process这类关键词。
内容的提问来源于stack exchange,提问作者William Phan
相关产品推荐
相关产品推荐

