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
原文地址:https://www.cnblogs.com/barneywill/p/11026023.html
时间: 2024-10-12 05:46:20