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

Ubuntu 16.04.4下Jenkins莫名停止监听8080端口求助

Jenkins运行一段时间后拒绝连接的排查与解决

结合你描述的现象和给出的配置文件,咱们来一步步分析并解决这个问题:

问题现象回顾

  • Jenkins运行一段时间后Web界面返回「拒绝连接」,执行lsof -i -P -n | grep LISTEN发现8080端口无进程监听
  • 查看Jenkins日志cat /var/log/jenkins/jenkins.log无任何输出
  • 执行service jenkins start无反应,但service jenkins restart能恢复正常

核心原因分析

从现象来看,最可能的两个方向:

  1. PID文件残留:Jenkins进程异常退出后,/var/run/jenkins/jenkins.pid文件没被自动清理,启动脚本通过这个文件判断进程还在运行,所以start命令无动作;而restart会强制清理旧进程(不管是否存在)再启动,因此能恢复。
  2. Java进程被系统强制终止:比如触发了OOM Killer(内存不足),这种情况下Jenkins来不及写入日志到指定文件,直接被系统杀死,导致日志为空、进程消失。

具体排查步骤

1. 验证PID文件残留问题

当问题出现时,执行以下命令:

# 查看PID文件中的进程ID
cat /var/run/jenkins/jenkins.pid
# 检查该PID对应的进程是否真的存在
ps -p <上面得到的PID>

如果PID文件有内容,但ps命令显示进程不存在,就坐实了PID文件残留的问题。

2. 从系统日志找崩溃线索

Jenkins日志为空的话,系统日志大概率会留下痕迹:

# 查看系统syslog日志
tail -n 50 /var/log/syslog
# 查看内核日志,重点找OOM或Jenkins相关报错
dmesg | grep -i jenkins
dmesg | grep -i oom

如果看到类似「Out of memory: Killed process (java)」的内容,说明Jenkins因内存不足被系统强制终止。

3. 检查文件描述符限制

你的配置里设置了MAXOPENFILES=8192,但需要确认这个限制是否真的生效:

# 查看jenkins用户的文件描述符限制
su - jenkins -c "ulimit -n"
# 查看运行中Jenkins进程的实际限制(正常运行时执行)
cat /proc/$(pidof java)/limits | grep -i open

如果实际限制远低于8192,可能导致Jenkins打开过多文件后崩溃。

针对性解决方案

方案1:修复PID文件残留问题

针对SysVinit(使用service命令的系统)

编辑/etc/init.d/jenkins脚本,在start函数开头添加以下逻辑,自动清理无效的PID文件:

if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE")
    if ! ps -p "$PID" > /dev/null 2>&1; then
        echo "Removing stale PID file $PIDFILE"
        rm -f "$PIDFILE"
    fi
fi

保存后执行chmod +x /etc/init.d/jenkins确保脚本权限正常。

针对Systemd系统

编辑/lib/systemd/system/jenkins.service,确保以下配置存在:

PIDFile=/var/run/jenkins/jenkins.pid
Restart=on-failure
RestartSec=5

然后执行systemctl daemon-reload和systemctl restart jenkins,让Systemd自动监控并重启崩溃的Jenkins进程。

方案2:排查并解决内存问题

修改/etc/default/jenkins中的JAVA_ARGS,添加内存监控参数,方便定位OOM问题:

JAVA_ARGS="-Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jenkins/heapdump.hprof -Xlog:gc*:/var/log/jenkins/gc.log"

同时可以根据服务器内存情况调整堆内存,比如把注释掉的-Xmx1024m改成-Xmx2048m。

方案3:确保文件描述符限制生效

编辑/etc/security/limits.conf,添加以下内容:

jenkins soft nofile 8192
jenkins hard nofile 8192

重启服务器后,验证限制是否生效。

方案4:修复日志文件权限

如果Jenkins日志为空是因为没有写入权限,执行以下命令修复:

chown jenkins:jenkins /var/log/jenkins
chown jenkins:jenkins /var/log/jenkins/jenkins.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:01