首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Docker中监控java应用程序内存使用情况

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

Stack Overflow用户
提问于 2014-04-16 16:07:55
回答 6查看 9.7K关注 0票数 11

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

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

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

有什么好方法可以做到这一点吗?

谢谢

EN

回答 6

Stack Overflow用户

发布于 2015-09-11 20:37:04

要连接到在带有visualvmboot2docker中运行的docker容器中运行的java进程,您可以尝试执行以下操作:

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

代码语言:javascript
复制
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>运行您的映像。

然后使用<boot2docker_ip>:<port>visualvm中添加"Add JMX Connection“。

如果没有boot2docker,应该不会有太大的不同。

票数 10
EN

Stack Overflow用户

发布于 2014-07-17 14:57:49

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

代码语言:javascript
复制
DOCKER_ROOT_PROC=`(docker inspect -f "{{ .State.Pid }}" my_container)`

如果您正在使用像Phusion的baseimage这样的东西,那么您的java进程将是该进程的子进程。要查看层次结构,请使用:

代码语言:javascript
复制
pstree $DOCKER_ROOT_PROC

一旦有了这些,就可以使用以下命令编写脚本

代码语言:javascript
复制
ps -o pid,cmd --no-headers --ppid $DOCKER_ROOT_PROC

在您的脚本中递归地查找您想要监视的java进程(当然,使用一些正则表达式过滤)。最后,您可以使用此命令来获取java应用程序的内存使用量(以in为单位):

代码语言:javascript
复制
ps -o vsz -p $JAVAPROCESS

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

票数 3
EN

Stack Overflow用户

发布于 2014-10-12 19:38:24

为了监控码头容器,我推荐使用Google's cAdvisor project。这样您就有了一个监控docker容器的通用解决方案。只需在docker容器中运行您的应用程序,并检查cpu和内存使用情况。这里你有一个http API和一个web用户界面。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23103550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档