监控容器内的JVM
监控容器内的JVM一,不使用k8s,仅仅使用docker目前测试可行办法是HOST为宿主机ip,network_mode为"host"如下:entrypoint.shHOST为宿主机ip```bash#!/usr/bin/env bashset -xJMX_PORT=9010HOST="172.31.32.13"java \-Dsun.management.j...
·
监控容器内的JVM
一,不使用k8s,仅仅使用docker
目前测试可行办法是HOST为宿主机ip,network_mode为"host"
如下:
entrypoint.sh HOST为宿主机ip
```bash
#!/usr/bin/env bash
set -x
JMX_PORT=9010
HOST="172.31.32.13"
java \
-Dsun.management.jmxremote.level=FINEST \
-Dsun.management.jmxremote.handlers=java.util.logging.ConsoleHandler \
-Djava.util.logging.ConsoleHandler.level=FINEST \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.port=$JMX_PORT \
-Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \
-Dcom.sun.management.jmxremote.host=$HOST \
-Djava.rmi.server.hostname=$HOST \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
-jar /opt/app/app.jar
并配合docker-compose.yml networks:host
```bash
version: "2"
services:
loop:
build: .
ports:
- "9010:9010"
- "5005:5005"
network_mode: "host"
可以使用jvisaulvm远程连接
备注:当不使用network_mode:“host”
HOST:改为172.31.32.13,127.0.0.1 0.0.0.0 皆不通
二,监控k8s环境下的pod中的jvm
Step1 修改Deployment.yaml,添加以下System Properties
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1100
-Dcom.sun.management.jmxremote.rmi.port=1100
-Djava.rmi.server.hostname=localhost
注意,-Djava.rmi.server.hostname一定要设置成localhost
Step2 修改Deployment.yaml,添加Container Port
containers:
- name: ...
image: ...
ports:
- containerPort: 1100
name: tcp-jmx
Step3 部署Deployment
Step4 利用kubectl转发端口
kubectl -n <namespace> port-forward <pod-name> 1100
Step5 启动VisualVm,创建JMX连接localhost:1100
或启动jconsole jconsole localhost:1100
更多推荐
已为社区贡献5条内容
所有评论(0)