在ECS群集

时间:2017-09-14 16:57:10

标签: java docker amazon-ecs collectd

我有一个在docker容器中运行的java应用程序。我已在ECS集群中部署此容器。我想公开一个JMX端口,这样我就可以使用该机器上安装的CollectD代理收集JVM统计信息。

我在Java应用程序中指定的JVM参数

JAVA_OPTS="-Dspring.config.location=classpath:/base/ -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=10.0.7.118

如果我在非docker环境中运行此应用程序,我可以连接到此JMX端口。但是,我无法在Docker中做同样的事情。

我还在My Task Definition中给出了端口映射,因此这个端口可以暴露给外部世界。我知道,如果我使用docker run命令运行这个docker而不是指定-p param进行端口映射,但是我在这里不能这样做,因为我在部署此映像的ECS集群上运行此应用程序。所以我必须依赖任务定义提供的端口映射。

TaskDefnition

            "ContainerDefinitions": [
                {
                    "Name": "MyApplication",
                    "Cpu": "2048",
                    "Essential": "true",
                    "Image": "location of the image",
                    "Memory": "8192",
                    "MemoryReservation": "4096",
                    "Environment": [
                        {
                            "Name": "Test",
                            "Value": {
                                "Fn::GetAtt": [
                                    "SomeAttrib",
                                    "SomeAccessKey"
                                ]
                            }
                        }
                    ],
                    "PortMappings": [
                        {
                            "HostPort": "8080",
                            "ContainerPort": "8080"
                        },
                        {
                            "HostPort": "8008",
                            "ContainerPort": "8008"
                        }
                    ]
                }

1 个答案:

答案 0 :(得分:0)

通过各种链接后,我找到了解决问题的方法。最后,JVM参数看起来像这样

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=8008 -Dcom.sun.management.jmxremote.local.only=true

添加-Dcom.sun.management.jmxremote.local.only = true为我做了诀窍。您可以根据需要将其设置为true或false。