首页 > 解决方案 > 尝试将 Gradle 应用程序部署到 Heroku 时,如何解决与 JMX 相关的 BindException?

问题描述

我正在尝试将 Gradle 应用程序部署到 Heroku。我能够很好地运行它:

我设置了自动部署,因此每当我推送到 GitHub 存储库时它都会重新部署,但构建一直失败,并出现如下所示的错误。我可以看到似乎存在某种端口问题,但我不知道如何解决它。我也无法在网上找到很多相关材料。我尝试PORT通过 Heroku 仪表板设置一个配置变量,希望它会改变一些东西,但它没有效果。

我也包括了我的Procfilebuild.gradle。我非常乐意提供任何其他信息。

档案

worker: ./gradlew run

构建.gradle

注意:据我所知,我没有指定任何额外/特定的 Gradle 任务,只是使用默认run任务。

plugins {
    id 'application'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    // Jitpack repo for Javacord sdcf4j command framework
    maven { url 'https://jitpack.io' }
}

application {
    mainClass = "Main"
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'

    // Javacord library
    implementation 'org.javacord:javacord:3.1.2'
    // Javacord sdcf4j command framework
    implementation 'de.btobastian.sdcf4j:sdcf4j-core:1.0.10'
    implementation 'de.btobastian.sdcf4j:sdcf4j-javacord:1.0.10'

    // .env library
    implementation 'io.github.cdimascio:dotenv-java:2.2.0'

    // Jsoup web parser
    implementation 'org.jsoup:jsoup:1.13.1'

    // OkHttp web client
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'

    // Gson JSON Java library
    implementation 'com.google.code.gson:gson:2.8.6'

    // Unicode emoji library
    implementation 'com.vdurmont:emoji-java:5.1.1'
}

test {
    useJUnitPlatform()
}

应用程序日志

2021-06-05T01:08:32.374751+00:00 heroku[worker.1]: State changed from crashed to starting
2021-06-05T01:08:38.692020+00:00 heroku[worker.1]: Starting process with command `./gradlew run`
2021-06-05T01:08:39.427162+00:00 heroku[worker.1]: State changed from starting to up
2021-06-05T01:08:43.289834+00:00 app[worker.1]: [heroku-exec] Starting
2021-06-05T01:08:43.379482+00:00 app[worker.1]: Picked up JAVA_TOOL_OPTIONS: -XX:+UseContainerSupport -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1098 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true -Djava.rmi.server.hostname=172.17.30.246 -Djava.rmi.server.port=1099
2021-06-05T01:08:44.637990+00:00 app[worker.1]: Downloading https://services.gradle.org/distributions/gradle-7.0.2-bin.zip
2021-06-05T01:08:52.101137+00:00 app[worker.1]: ..........10%...........20%...........30%..........40%...........50%...........60%..........70%...........80%...........90%..........100%
2021-06-05T01:08:55.218414+00:00 app[worker.1]:
2021-06-05T01:08:55.218878+00:00 app[worker.1]: Welcome to Gradle 7.0.2!
2021-06-05T01:08:55.218958+00:00 app[worker.1]:
2021-06-05T01:08:55.219424+00:00 app[worker.1]: Here are the highlights of this release:
2021-06-05T01:08:55.219760+00:00 app[worker.1]: - File system watching enabled by default
2021-06-05T01:08:55.220218+00:00 app[worker.1]: - Support for running with and building Java 16 projects
2021-06-05T01:08:55.220599+00:00 app[worker.1]: - Native support for Apple Silicon processors
2021-06-05T01:08:55.220989+00:00 app[worker.1]: - Dependency catalog feature preview
2021-06-05T01:08:55.221138+00:00 app[worker.1]:
2021-06-05T01:08:55.223252+00:00 app[worker.1]: For more details see https://docs.gradle.org/7.0.2/release-notes.html
2021-06-05T01:08:55.223339+00:00 app[worker.1]:
2021-06-05T01:08:55.516626+00:00 app[worker.1]: Starting a Gradle Daemon (subsequent builds will be faster)
2021-06-05T01:08:56.918122+00:00 app[worker.1]:
2021-06-05T01:08:56.920839+00:00 app[worker.1]: FAILURE: Build failed with an exception.
2021-06-05T01:08:56.921905+00:00 app[worker.1]:
2021-06-05T01:08:56.934575+00:00 app[worker.1]: * What went wrong:
2021-06-05T01:08:56.934883+00:00 app[worker.1]: Unable to start the daemon process.
2021-06-05T01:08:56.937873+00:00 app[worker.1]: This problem might be caused by incorrect configuration of the daemon.
2021-06-05T01:08:56.937978+00:00 app[worker.1]: For example, an unrecognized jvm option is used.
2021-06-05T01:08:56.938149+00:00 app[worker.1]: Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/7.0.2/userguide/gradle_daemon.html
2021-06-05T01:08:56.943590+00:00 app[worker.1]: Process command line: /app/.jdk/bin/java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dcom.sun.management.jmxremote -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /app/.gradle/wrapper/dists/gradle-7.0.2-bin/857tjihv64xamwrf0h14cai3r/gradle-7.0.2/lib/gradle-launcher-7.0.2.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.0.2
2021-06-05T01:08:56.943803+00:00 app[worker.1]: Please read the following process output to find out more:
2021-06-05T01:08:56.943956+00:00 app[worker.1]: -----------------------
2021-06-05T01:08:56.944251+00:00 app[worker.1]: Picked up JAVA_TOOL_OPTIONS: -XX:+UseContainerSupport -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1098 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true -Djava.rmi.server.hostname=172.17.30.246 -Djava.rmi.server.port=1099
2021-06-05T01:08:56.944444+00:00 app[worker.1]: Error: JMX connector server communication error: service:jmx:rmi://48e59a0d-ba98-4cec-8901-cb7a9ee7ab58:1099
2021-06-05T01:08:56.944644+00:00 app[worker.1]: jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
2021-06-05T01:08:56.944809+00:00 app[worker.1]: java.net.BindException: Address already in use
2021-06-05T01:08:56.945026+00:00 app[worker.1]: at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:844)
2021-06-05T01:08:56.945195+00:00 app[worker.1]: at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:481)
2021-06-05T01:08:56.945390+00:00 app[worker.1]: at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:447)
2021-06-05T01:08:56.945570+00:00 app[worker.1]: at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:599)
2021-06-05T01:08:56.946133+00:00 app[worker.1]: Caused by: java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
2021-06-05T01:08:56.946291+00:00 app[worker.1]: java.net.BindException: Address already in use
2021-06-05T01:08:56.946496+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
2021-06-05T01:08:56.946665+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:243)
2021-06-05T01:08:56.946864+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
2021-06-05T01:08:56.947066+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
2021-06-05T01:08:56.947270+00:00 app[worker.1]: at java.rmi/sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:232)
2021-06-05T01:08:56.947564+00:00 app[worker.1]: at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap$PermanentExporter.exportObject(ConnectorBootstrap.java:205)
2021-06-05T01:08:56.947750+00:00 app[worker.1]: at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:153)
2021-06-05T01:08:56.947930+00:00 app[worker.1]: at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:138)
2021-06-05T01:08:56.948092+00:00 app[worker.1]: at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:453)
2021-06-05T01:08:56.948294+00:00 app[worker.1]: at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:840)
2021-06-05T01:08:56.948442+00:00 app[worker.1]: ... 3 more
2021-06-05T01:08:56.948593+00:00 app[worker.1]: Caused by: java.net.BindException: Address already in use
2021-06-05T01:08:56.948752+00:00 app[worker.1]: at java.base/sun.nio.ch.Net.bind0(Native Method)
2021-06-05T01:08:56.948916+00:00 app[worker.1]: at java.base/sun.nio.ch.Net.bind(Net.java:552)
2021-06-05T01:08:56.949092+00:00 app[worker.1]: at java.base/sun.nio.ch.Net.bind(Net.java:541)
2021-06-05T01:08:56.949266+00:00 app[worker.1]: at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)
2021-06-05T01:08:56.949417+00:00 app[worker.1]: at java.base/java.net.ServerSocket.bind(ServerSocket.java:395)
2021-06-05T01:08:56.949570+00:00 app[worker.1]: at java.base/java.net.ServerSocket.<init>(ServerSocket.java:281)
2021-06-05T01:08:56.949734+00:00 app[worker.1]: at java.base/java.net.ServerSocket.<init>(ServerSocket.java:172)
2021-06-05T01:08:56.950010+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPDirectSocketFactory.createServerSocket(TCPDirectSocketFactory.java:45)
2021-06-05T01:08:56.952148+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
2021-06-05T01:08:56.952314+00:00 app[worker.1]: at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
2021-06-05T01:08:56.952478+00:00 app[worker.1]: ... 12 more
2021-06-05T01:08:56.952554+00:00 app[worker.1]:
2021-06-05T01:08:56.952656+00:00 app[worker.1]:
2021-06-05T01:08:56.952800+00:00 app[worker.1]: * Try:
2021-06-05T01:08:56.953633+00:00 app[worker.1]: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2021-06-05T01:08:56.953714+00:00 app[worker.1]:
2021-06-05T01:08:56.953970+00:00 app[worker.1]: * Get more help at https://help.gradle.org
2021-06-05T01:08:57.514019+00:00 heroku[worker.1]: Process exited with status 1
2021-06-05T01:08:57.587974+00:00 heroku[worker.1]: State changed from up to crashed

其他注意事项:我在我的机器上使用 Java 16、Gradle 7.0.2 和 Windows 10,如果这很重要,我认为 Heroku dynos 使用 GNU。


更新

我创建了一个新的 heroku 应用程序,看看部署到一个新的应用程序是否会有所帮助。该应用程序第一次构建并运行良好,JAVA_TOOL_OPTIONS日志中唯一的-XX:+UseContainerSupport -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8. 但是,一旦我重新启动测功机,我得到了与上面完全相同的错误。

标签: javagradleherokurmijmx

解决方案


推荐阅读