命令行中的Java执行因JMX错误而失败

命令行中的Java执行因JMX错误而失败,java,docker,kubernetes,jmx,amazon-eks,Java,Docker,Kubernetes,Jmx,Amazon Eks,我们有运行在EKS中的应用程序,它们在尝试连接Jconsole时抱怨“地址已在使用”。当我们试图运行java-version时,同样的错误也失败了。见以下例外情况: /home/app # java -version Error: JMX connector server communication error: service:jmx:rmi://qa-my-app-av22b3dcbc-4322t:9110 sun.management.AgentConfigurationError: ja

我们有运行在EKS中的应用程序,它们在尝试连接Jconsole时抱怨“地址已在使用”。当我们试图运行java-version时,同样的错误也失败了。见以下例外情况:

/home/app # java -version
Error: JMX connector server communication error: service:jmx:rmi://qa-my-app-av22b3dcbc-4322t:9110
sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 9110; nested exception is: 
        java.net.BindException: Address already in use (Bind failed)
        at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:800)
        at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:468)
        at sun.management.Agent.startAgent(Agent.java:262)
        at sun.management.Agent.startAgent(Agent.java:452)
        at java.lang.System.startSNMPAgent(Native Method)
        at java.lang.Thread.completeInitialization(Thread.java:168)
        at java.lang.J9VMInternals.completeInitialization(J9VMInternals.java:74)
Caused by: java.rmi.server.ExportException: Port already in use: 9110; nested exception is: 
        java.net.BindException: Address already in use (Bind failed)
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
        at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
        at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
        at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
        at sun.management.jmxremote.ConnectorBootstrap$PermanentExporter.exportObject(ConnectorBootstrap.java:199)
        at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:146)
        at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:122)
        at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:404)
        at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:796)
        ... 6 more
Caused by: java.net.BindException: Address already in use (Bind failed)
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
        at java.net.ServerSocket.bind(ServerSocket.java:390)
        at java.net.ServerSocket.<init>(ServerSocket.java:252)
        at java.net.ServerSocket.<init>(ServerSocket.java:143)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:345)
        at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
        ... 15 more
Exception in thread "main" java/lang/RuntimeException: sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 9110; nested exception is: 
        java.net.BindException: Address already in use (Bind failed)
        at sun/management/Agent.error (Agent.java:526)
        at sun/management/Agent.startAgent (Agent.java:269)
        at sun/management/Agent.startAgent (Agent.java:452)
        at java/lang/System.startSNMPAgent (NativeMethod:4294967295)
        at java/lang/Thread.completeInitialization (Thread.java:168)
        at java/lang/J9VMInternals.completeInitialization (J9VMInternals.java:74)
图像入口点很简单
ENTRYPOINT[“java”、“-jar”、“/home/app/application.jar”]

该端口上似乎有另一个进程。如果不重要,请关闭进程bia fuser,例如:

sudo fuser -k 9110/tcp
在杀死它之前,你也可以检查它在听什么:

lsof -i :9110

端口清洁后,重试。另一个选项是将rmi端口号更改为与
9110不同的值,因为jmx不需要特定的端口号才能工作(不要忘记更改端点上的端口)。

明白了,问题是我们的JAVA_工具_选项环境变量没有更改,因此,每次我运行
java
时,它试图获取容器中运行的JVM应用程序所占用的端口时都失败了。我想我根本帮不了什么忙,但很高兴你修复了它,伙计:)
lsof -i :9110