【原創】大叔經驗分享(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM