zoukankan      html  css  js  c++  java
  • 【原创】大叔经验分享(71)docker容器中使用jvm工具

    java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具?

    首先要看使用的docker镜像,

    • 比如常用的openjdk镜像分为jdk和jre,只有jdk版本才有jvm工具,所以可以直接使用jdk版本的openjdk;
    • 比如常用的tomcat镜像则没有jdk和jre选择,默认使用都是jre,所以没有jvm工具,tomcat镜像中的jdk目录如下:
    # ls /usr/lib/jvm/java-1.8-openjdk
    bin  jre  lib
    # ls /usr/lib/jvm/java-1.8-openjdk/bin
    appletviewer  orbd          rmid          tnameserv
    java          pack200       rmiregistry   unpack200
    keytool       policytool    servertool
    # ls /usr/lib/jvm/java-1.8-openjdk/lib
    amd64

    这时可以采用挂载的方式,将jdk文件挂载到容器中然后执行,首先要找到对应的jdk文件,第一步是找到当前容器的操作系统版本,

    常见的几个版本:

    Alpine

    cat /etc/os-release
    NAME="Alpine Linux"
    ID=alpine
    VERSION_ID=3.9.3
    PRETTY_NAME="Alpine Linux v3.9"
    HOME_URL="https://alpinelinux.org/"
    BUG_REPORT_URL="https://bugs.alpinelinux.org/"

    Debian

    # cat /etc/os-release
    PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
    NAME="Debian GNU/Linux"
    VERSION_ID="9"
    VERSION="9 (stretch)"
    ID=debian
    HOME_URL="https://www.debian.org/"
    SUPPORT_URL="https://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"

    Centos

    # cat /etc/os-release
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"

    然后根据操作系统版本找到对应的jdk镜像,比如openjdk

    openjdk:<version> 基于debian
    openjdk:<version>-alpine 基于alpine

    而tomcat镜像是基于alpine,所以下载openjdk:8-jdk-alpine,8是具体的jdk版本,下载之后,将jdk目录拷贝出来

    /usr/lib/jvm/java-1.8-openjdk/

    想要使用jvm工具,有几种方式:

    • 直接将文件拷贝到容器中;
    • 将需要的文件挂载到容器中;
    • 将jdk目录挂载到容器中,直接替换原来的jdk目录;

    前边两种方式只需要少量的几个文件,一个是$JAVA_HOME/lib/tools.jar,一个是$JAVA_HOME/bin/中具体的jvm工具比如jmap、jstack、jstat等,将文件拷贝或挂载到容器中的指定位置即可使用;

    最后一种最简单,挂载jdk目录之后所有的jvm工具都可以使用;

    # docker exec -it $container_id jstat -gcutil $pid
      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
      0.00 100.00  73.20  60.74  95.79  93.92    417    3.163     8    1.213    4.376

    参考:

    https://hub.docker.com/_/openjdk

    https://hub.docker.com/_/tomcat

  • 相关阅读:
    常用模块
    递归函数
    内置函数与匿名函数
    Mac控制台相关操作
    Maven相关知识记录
    @Import底层实现原理
    spring循环依赖
    springcloud注册中心对比
    分布式事务
    Drools使用注意事项
  • 原文地址:https://www.cnblogs.com/barneywill/p/11026023.html
Copyright © 2011-2022 走看看