监控容器内的JVM

监控容器内的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值