繁体   English   中英

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

[英]How to monitor java application memory usage in Docker

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

有没有办法监视java应用程序的内存使用情况? 我尝试使用具有jconsole进程ID的jconsole ,但它告诉我Invalidate process id

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

有没有什么好办法实现这个目标?

谢谢

要连接到一个java进程运行在一个码头工人的容器运行在boot2dockervisualvm ,你可以尝试以下方法:

使用以下选项启动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>来运行映像。

然后“添加JMX连接”在visualvm<boot2docker_ip>:<port>

没有boot2docker它应该没有太大的不同。

要监控它的使用情况,您需要获得它的真实进程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一起使用,但它是一种监视内存使用情况的方法。

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

我尝试了皮埃尔的答案也在这里回答 ),但没办法。

最后我可以使用SSH隧道连接。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM