【原创】大叔经验分享(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=""
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=""
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=""
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION=""
然后根据操作系统版本找到对应的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
【原创】大叔经验分享(71)docker容器中使用jvm工具的更多相关文章
- 【原创】大叔经验分享(32)docker挂载文件修改生效
docker经常需要挂载文件到容器中,比如启动nginx # docker run -d --name test_nginx -v /tmp/nginx.conf:/etc/nginx/nginx.c ...
- 【原创】经验分享:一个小小emoji尽然牵扯出来这么多东西?
前言 之前也分享过很多工作中踩坑的经验: 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移? [原创]经验分享:一个Content-Length引发的血案(almost.. ...
- Docker容器中运行ASP.NET Core
在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...
- 在 docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...
- Docker容器中开始.NETCore之路
一.引言 开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境 ...
- 隔离 docker 容器中的用户
笔者在前文<理解 docker 容器中的 uid 和 gid>介绍了 docker 容器中的用户与宿主机上用户的关系,得出的结论是:docker 默认没有隔离宿主机用户和容器中的用户.如果 ...
- Docker容器中开始.Net Core之路
开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境,服务器也 ...
- Docker容器中找不到vim命令
docker容器中,有的并未安装vi和vim,输入命令vim,会提示vim: command not found(如下图).此时我们就要安装vi命令 执行命令:apt-get update apt-g ...
- docker容器中Postgresql 数据库备份
查看运行的容器: docker ps 进入目标容器: docker exec -u root -it 容器名 /bin/bash docker 中,以root用户,创建备份目录,直接执行如下命令, p ...
随机推荐
- LC 593. Valid Square
Given the coordinates of four points in 2D space, return whether the four points could construct a s ...
- kotlin之类构造器
Kotlin中类允许定义个主构造器和多个第二构造器. 主构造器就是类头的一部分,紧跟在类名的后面,构造器参数是可选的 package loaderman import loaderman.bar.Pe ...
- 谈谈我对证券公司一些部门的理解(前、中、后台)[z]
[z]https://blog.csdn.net/UniRong/article/details/79289947 文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6大部门(经纪 ...
- partprobe 和 partx 的用法
partprobe: 用于重读分区表,当出现删除文件后,出现仍然占用空间.可以partprobe在不重启的情况下重读分区. 将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表. -d 不更新内核 ...
- SQL server中获取语句执行时间
在写代码的时候,有时候实现一个功能会有好多个方法,有时候会做一下方法的耗时对比,综合下时间复杂度与空间复杂度,写出最好的代码: 同样,在写一些SQL查询,SQL代码的时候,也希望能写出一个高效一点的查 ...
- laravel如何打印orm封装的sql语句
$query = CdbForumSellthreadSearch::where($params)->orderBy("$orderby", "$ascDesc&q ...
- vue路由传参的几种基本方式
原文地址 this.$router.push跳转 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据.父组件中: <li v-for="article i ...
- 【HANA系列】SAP HANA SQL IFNULL和NULLIF用法与区别
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL IFN ...
- Shell中test比较
数字比较 比较 描述 -eq 检查是否相等 -ge 检查是否大于或等于 -gt 检查是否大于 -le 检查是否小于或者等于 -lt 检查是否小于 -ne 检查是否不等于 字符串比较 = 检查字符串1和 ...
- C学习笔记-字符串
对于C语言来说,字符串其实就是最后一个元素为'\0'的char数组 字符数组的初始化 字符数组常见的有两种初始化方式 char str[] = "hello"; 或者 char s ...