jenkinsci / jenkinsci/plugin-installation-manager-tool

Port already in use when jmx enabled

Open
#556 3 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
463
Forks
228
Avg merge
31m
Merged PRs (30d)
15

Description

### Jenkins and plugins versions report

Environment


```text
Paste the output here
```

### What Operating System are you using (both controller, and any agents involved in the problem)?

Image - jenkins/jenkins:2.387.2-lts-jdk11
Helm chart -https://github.com/jenkinsci/helm-charts - v4.3.21
AWS EKS v1.25 - m7g.8xlarge - arm64

### Reproduction steps

Enable JMX when installing jenkins

Example
https://github.com/jenkinsci/helm-charts/blob/main/charts/jenkins/values.yaml#L231-L235
```
javaOpts: >
-Dcom.sun.management.jmxremote.port=4000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
jmxPort: 4000
```

Try to run jenkins-plugin-cli on jenkins instance

```
Error: JMX connector server communication error: service:jmx:rmi://jenkins-sandbox-0:4000
jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 4000; nested exception is
```

### Expected Results

Be able to run jenkins-plugin-cli without error when jmx is enabled on jenkins

### Actual Results

```
jenkins@jenkins-sandbox-0:/$ jenkins-plugin-cli --version
Error: JMX connector server communication error: service:jmx:rmi://jenkins-sandbox-0:4000
jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 4000; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:820)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:479)
at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:447)
at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:599)
Caused by: java.rmi.server.ExportException: Port already in use: 4000; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:243)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
at java.rmi/sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at java.rmi/sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:234)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap$PermanentExporter.exportObject(ConnectorBootstrap.java:203)
at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:153)
at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:138)
at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:473)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:816)
... 3 more
Caused by: java.net.BindException: Address already in use (Bind failed)
at java.base/java.net.PlainSocketImpl.socketBind(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:452)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:395)
at java.base/java.net.ServerSocket.(ServerSocket.java:257)
at java.base/java.net.ServerSocket.(ServerSocket.java:149)
at java.rmi/sun.rmi.transport.tcp.TCPDirectSocketFactory.createServerSocket(TCPDirectSocketFactory.java:45)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:324)
... 12 more
```

### Anything else?

Changing the jmx port has the same outcome

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the failure with JMX enabled on port 4000 and running `jenkins-plugin-cli --version`. Then trace the CLI startup path that initializes or connects to JMX; done means the command runs successfully when Jenkins already has JMX enabled, including when the configured port is changed.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.