如何在Docker中监视java应用程序内存使用情况

时间:2014-04-16 08:07:55

标签: memory jvm docker monitoring cadvisor

我在Docker容器中的tomcat上运行java web应用程序。

有没有办法监控java应用程序的内存使用情况?我尝试将jconsole与docker的进程ID一起使用,但它告诉我Invalidate process id

我也在tomcat中启用JMX,但不知道如何绑定它。我可以使用本地的visualvm绑定主机,但无法找到绑定到主机内部的docker的方法。

有没有什么好方法可以实现这个目标?

由于

6 个答案:

答案 0 :(得分:7)

要连接到在boot2docker中使用visualvm运行的docker容器中运行的java进程,您可以尝试以下操作:

使用以下选项启动您的java进程:

java -Dcom.sun.management.jmxremote.port=<port> \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=<port> \
-Djava.rmi.server.hostname=<boot2docker_ip> \
<Main>

您需要使用--expose <port> -p <port>:<port>运行图片。

然后使用visualvm<boot2docker_ip>:<port>中添加“添加JMX连接”。

没有boot2docker,它应该没什么不同。

答案 1 :(得分:3)

要监控它的使用情况,您需要获得它的真实进程ID。如果您直接在容器中运行tomcat,那么它应该是:

DOCKER_ROOT_PROC=`(docker inspect -f "{{ .State.Pid }}" my_container)`

如果您使用的是Phusion的baseimage,那么您的java进程将成为该进程的子进程。要查看层次结构,请使用:

pstree $DOCKER_ROOT_PROC

完成后,您可以使用

编写脚本
ps -o pid,cmd --no-headers --ppid $DOCKER_ROOT_PROC

在您的脚本中以递归方式查找要监视的java进程(当然,使用一些正则表达式筛选)。最后你可以使用它来获取你的java应用程序的内存使用量,以千字节为单位:

ps -o vsz -p $JAVAPROCESS

我不知道这是否可以与jconsole一起使用,但它是监视内存使用情况的一种方式。

答案 2 :(得分:3)

要监控泊坞容器,我建议Google's cAdvisor project。这样,您就可以使用通用的解决方案来监控docker容器。只需运行你的应用程序,无论是什么,在docker容器中,并检查cpu和内存使用情况。这里有一个http API以及一个web ui。

答案 3 :(得分:0)

我尝试了Pierre's answeralso answered here),但没办法。

最后,我可以使用SSH tunnel连接。

答案 4 :(得分:0)

上面提到的cAdvisor无法帮助监视在容器内运行的Tomcat。您可能需要查看SPM Client docker容器,它正是这样做的!它具有用于监视在Docker中运行的许多不同应用程序的代理 - Elasticsearch,Solr,Tomcat,MySQL等:https://github.com/sematext/docker-spm-client

答案 5 :(得分:0)

对于Docker中应用程序的内存使用情况监控,您还可以在Docker容器内启动ejstatd(在启动主容器进程之前从ejstatd文件夹调用mvn -Djava.rmi.server.hostname=$HOST_HOSTNAME exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224" &),公开这些3使用docker run -e HOST_HOSTNAME=$HOSTNAME -p 2222:2222 -p 2223:2223 -p 2224:2224 myimage到Docker主机的端口。

然后,您将能够使用JVisualVM连接到此特殊jstatd守护程序,例如,添加“远程主机”,将Docker主机名指定为“主机名”并添加“自定义jstatd连接”(在“高级设置”中) )通过将“2222”设置为“端口”。

免责声明:我是这个开源工具的作者。

相关问题