场景介绍
- 在线上运行的应用程序,如果出现OOM等JVM异常,我们需要通过灾难现场来判断问题代码的所在
- 如果现场具备JDK环境,则可以直接使用jmap jstack 这些内存分析工具进行问题的分析
- 如果现场不具备JDK环境,比如基于Docker运行的Alpine的Java运行环境,一般不具备JDK环境
基于JRE环境运行的Docker容器JVM调优方法
联网环境
1 2
| # 进入容器 sudo docker exec -it xxxx /bin/sh
|
1 2
| # 更新apk源 echo https://mirrors.aliyun.com/alpine/v3.14/main > /etc/apk/repositories && echo https://mirrors.aliyun.com/alpine/v3.14/community >> /etc/apk/repositories
|
1 2
| # 安装openjdk8 apk update && apk upgrade && apk add openjdk8
|
1 2 3 4 5 6
| #进入openjdk8目录 cd /usr/lib/jvm/java-1.8-openjdk/bin
#执行命令 jps #列出Java进程 jstack 7 #查看堆栈信息
|
无网环境
在有网环境下按照上述步骤进行操作,然后将openjdk8拷贝到宿主机,将上述文件导入无网环境下,拷贝到容器中,即可进行JVM调优
1 2
| sudo docker cp xxxxxxx:/usr/lib/jvm/java-1.8-openjdk . sudo tar -zcvf java-1.8-openjdk.tar.gz java-1.8-openjdk
|
如若遇到权限问题,请自行赋予操作权限
1 2
| sudo tar -zxvf java-1.8-openjdk.tar.gz sudo docker cp java-1.8-openjdk xxxxxx:~
|