Bro*_*Lin 10 memory monitoring jvm docker cadvisor
我在Docker容器中的tomcat上运行java web应用程序.
有没有办法监视java应用程序的内存使用情况?我尝试使用jconsole
docker的进程ID,但它告诉我Invalidate process id
我也在tomcat中启用JMX,但不知道如何绑定它.我可以使用visualvm
我的本地绑定主机,但找不到绑定到主机内部的docker的方法.
有没有什么好办法实现这个目标?
谢谢
要连接到在其中运行的docker容器中运行的java进程boot2docker
,visualvm
可以尝试以下操作:
使用以下选项启动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>
Run Code Online (Sandbox Code Playgroud)
你需要运行你的图像--expose <port> -p <port>:<port>
.
在随后的"添加JMX连接" visualvm
使用<boot2docker_ip>:<port>
.
没有它应该没有太大的不同boot2docker
.
要监控它的使用情况,您需要获取它的真实进程 ID。如果直接在容器中运行tomcat,那么应该是:
DOCKER_ROOT_PROC=`(docker inspect -f "{{ .State.Pid }}" my_container)`
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Phusion 的基本映像之类的东西,那么您的 java 进程将是该进程的子进程。要查看层次结构,请使用:
pstree $DOCKER_ROOT_PROC
Run Code Online (Sandbox Code Playgroud)
一旦你有了这个,你就可以使用编写你的脚本
ps -o pid,cmd --no-headers --ppid $DOCKER_ROOT_PROC
Run Code Online (Sandbox Code Playgroud)
在你的脚本中递归地找到你想要监控的java进程(当然,使用一些正则表达式过滤)。最后,您可以使用它来获取 Java 应用程序的内存使用量(以千字节为单位):
ps -o vsz -p $JAVAPROCESS
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可以与 jconsole 一起使用,但它是一种监视内存使用情况的方法。
归档时间: |
|
查看次数: |
7511 次 |
最近记录: |