【问题标题】:jenkins jnlp slave agent refusing to listen on portjenkins jnlp slave agent 拒绝监听端口
【发布时间】:2014-10-12 19:35:45
【问题描述】:

所以我正在尝试将我的 jnlp 从代理(通过 java web start)连接到我的 jenkins 主机器。

我为 jnlp 从代理的 tcp 连接固定端口 49187,并在从机中打开它。当我尝试连接时,它通过了握手但随后失败并出现以下错误:

Aug 19, 2014 3:51:10 PM com.youdevise.hudson.slavestatus.SlaveListener call
INFO: Slave-status listener starting
Aug 19, 2014 3:51:10 PM com.youdevise.hudson.slavestatus.SlaveListener$1 run
SEVERE: Could not listen on port
java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(Unknown Source)
        at java.net.ServerSocket.bind(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at com.youdevise.hudson.slavestatus.SocketHTTPListener.waitForConnection
(SlaveListener.java:129)
        at com.youdevise.hudson.slavestatus.SlaveListener$1.run(SlaveListener.ja
va:63)
        at com.youdevise.hudson.slavestatus.Daemon.go(Daemon.java:16)
        at com.youdevise.hudson.slavestatus.SlaveListener.call(SlaveListener.jav
a:83)
        at hudson.remoting.UserRequest.perform(UserRequest.java:118)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:326)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecut
orService.java:72)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1$1.run(Engine.java:58)
        at java.lang.Thread.run(Unknown Source)

我有 inbound , outbound opne 但不知道为什么我会遇到这个错误..有什么想法吗?

以下是建议答案的输出:

[root@ip-10-192-35-89 ~]# netstat -ntpl | grep 49187
tcp        0      0 :::49187                    :::*                        LISTEN      1054/java
[root@ip-10-192-35-89 ~]# ps -ef|grep 1054
jenkins   1054     1  2 Aug14 ?        02:56:02 /etc/alternatives/java -Djava.awt.headless=true -Xmx2048m -XX:MaxPermSize=512m -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=7777 --ajp13Port=8009 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root      2483  2463  0 19:18 pts/0    00:00:00 grep 1054

【问题讨论】:

  • @你试过这个建议了吗?
  • @Technext - 是的,它奏效了!
  • 我很高兴它成功了。 :)
  • 你在说什么建议?

标签: jenkins jnlp jenkins-cli


【解决方案1】:

从以下几行来看,似乎某些进程已经在使用端口 49187:

SEVERE: Could not listen on port
java.net.BindException: Address already in use: JVM_Bind

只需运行以下命令即可获取进程 ID:

netstat -ntpl | grep 49187

从输出中获取进程 ID,然后运行以下命令以查看哪个进程正在使用端口 49187。然后您可以终止该进程并尝试连接到 JNLP 从代理。

ps -ef | grep PID_from_above_output

例如,

[root@jenkins gc]# netstat -ntpl | grep 1569
tcp        0      0 127.0.0.1:25       0.0.0.0:*    LISTEN      1569/sendmail
[root@jenkins gc]#
[root@jenkins gc]# ps -ef | grep 1569
root      1569     1  0 Jun26 ?        00:01:13 sendmail: accepting connections
root      8083  8059  0 21:35 pts/0    00:00:00 grep 1569

如您所见,sendmail 程序正在使用端口 1569 来监听请求。

【讨论】:

  • 从输出看来,Jenkins 本身正在使用该端口。我仍然建议你杀死 (kill 1054) 它一次,然后确保它被杀死 (ps -ef | grep jenkins)。完成后,尝试使用 JNLP 再次连接。如果我建议的步骤不起作用,那么另一种方法是更改​​端口 49187 并改用其他端口。只需确保它是 1023 到 65535 之间的任意数字。顺便问一下,你是在 Tomcat 等容器中运行 Jenkins 吗?
【解决方案2】:

当我遇到它说的问题时 JNLP Port is already in use。我尝试为我们的 JNLP 端口在 jenkins master 上进行 grepping 并执行 netstat,但我从未在该特定端口上运行任何进程。似乎詹金斯将 JNLP 端口信息存储在某处并且不确定。 我所做的是将JNLP端口更改为其他端口,保存配置,尝试运行slave命令,然后再次使用相同的旧端口更新JNLP端口并再次重新启动jnlp slave。它现在没有任何问题。显然问题发生在我们重新启动我们的 jenkins master 时。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2023-03-09
    • 2019-04-02
    • 1970-01-01
    • 2019-03-02
    • 2017-04-14
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多