Docker Dockerfile 验证Docker内部使用jmap报错问题解决

对于线上排查问题,如果不能轻松使用一些Java命令行工具真的有点崩溃。

目录

异常信息

类型一:Can't attach to the process

类型二:unknown CollectedHeap type

实验验证

先决条件

Dockerfile创建

镜像创建

运行示例

进入容器测试jmap

参考文章


异常信息

类型一:Can't attach to the process

Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 14: 不允许的操作

类型二:unknown CollectedHeap type

Caused by: java.lang.RuntimeException: unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap

实验验证

先决条件

Dockerfile创建

FROM ubuntu:20.04
MAINTAINER boonya <boonya@sina.com>
# now add java and tomcat support in the container
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
#持久化到指定目录
VOLUME /tmp
# 将工程jar包(springboot-angular-0.0.1-SNAPSHOT.jar)拷贝到 app.jar中
ADD springboot-angular-0.0.1-SNAPSHOT.jar /app.jar
# configuration of java and tomcat ENV
ENV JAVA_HOME /usr/local/jdk1.8.0_291
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# container listener port
EXPOSE 8080
# 执行jar包  "-Djava.security.egd=file:/dev/./urandom"加快随机数产生过程
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

镜像创建

[root@boonya java]# docker build -t boonya/springboot-angular .
Sending build context to Docker daemon  527.8MB
Step 1/10 : FROM ubuntu:15.06
manifest for ubuntu:15.06 not found: manifest unknown: manifest unknown
[root@boonya java]# vi Dockerfile 
[root@boonya java]# docker build -t boonya/springboot-angular .
Sending build context to Docker daemon  527.8MB
Step 1/10 : FROM ubuntu:20.04
20.04: Pulling from library/ubuntu
c549ccf8d472: Pull complete 
Digest: sha256:aba80b77e27148d99c034a987e7da3a287ed455390352663418c0f2ed40417fe
Status: Downloaded newer image for ubuntu:20.04
 ---> 9873176a8ff5
Step 2/10 : MAINTAINER boonya <boonya@sina.com>
 ---> Running in 7022c0ee27cd
Removing intermediate container 7022c0ee27cd
 ---> 54cc9700971d
Step 3/10 : ADD jdk-8u291-linux-x64.tar.gz /usr/local/
 ---> 6961cba3491b
Step 4/10 : VOLUME /tmp
 ---> Running in 96b64b89d45d
Removing intermediate container 96b64b89d45d
 ---> ac1b616b2604
Step 5/10 : ADD springboot-angular-0.0.1-SNAPSHOT.jar /app.jar
 ---> 363ea3074b32
Step 6/10 : ENV JAVA_HOME /usr/local/jdk1.8.0_291
 ---> Running in 8aadc23e5bc5
Removing intermediate container 8aadc23e5bc5
 ---> 0b96e2a88e16
Step 7/10 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in ba105757392a
Removing intermediate container ba105757392a
 ---> d5f74064a5ca
Step 8/10 : ENV PATH $PATH:$JAVA_HOME/bin
 ---> Running in 9c713c0c1d58
Removing intermediate container 9c713c0c1d58
 ---> 1f36c428ee4d
Step 9/10 : EXPOSE 8080
 ---> Running in ea0689d40009
Removing intermediate container ea0689d40009
 ---> 8bfcd6e364af
Step 10/10 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 ---> Running in 9310b710652d
Removing intermediate container 9310b710652d
 ---> 985346a8bf9d
Successfully built 985346a8bf9d
Successfully tagged boonya/springboot-angular:latest

运行示例

[root@boonya java]# docker run -p 8080:8080 --name sa boonya/springboot-angular:latest --cap-add=SYS_PTRACE

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.0)

2021-07-02 06:43:05.895  INFO 1 --- [           main] c.b.s.a.SpringbootAngularApplication     : Starting SpringbootAngularApplication v0.0.1-SNAPSHOT using Java 1.8.0_291 on c0a283afb31b with PID 1 (/app.jar started by root in /)
2021-07-02 06:43:05.900  INFO 1 --- [           main] c.b.s.a.SpringbootAngularApplication     : No active profile set, falling back to default profiles: default
2021-07-02 06:43:07.596  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-07-02 06:43:07.619  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-07-02 06:43:07.619  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-07-02 06:43:07.680  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-07-02 06:43:07.680  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1719 ms
2021-07-02 06:43:08.083  INFO 1 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2021-07-02 06:43:08.248  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-07-02 06:43:08.270  INFO 1 --- [           main] c.b.s.a.SpringbootAngularApplication     : Started SpringbootAngularApplication in 3.296 seconds (JVM running for 3.894)
2021-07-02 06:43:08.278  INFO 1 --- [           main] o.s.b.a.ApplicationAvailabilityBean      : Application availability state LivenessState changed to CORRECT
2021-07-02 06:43:08.281  INFO 1 --- [           main] o.s.b.a.ApplicationAvailabilityBean      : Application availability state ReadinessState changed to ACCEPTING_TRAFFIC

进入容器测试jmap

[root@boonya java]# docker exec -it sa  /bin/sh
# jps
1 jar
43 Jps
# jp^Hm^H^H^H
/bin/sh: 2:: not found
# jmap -heap 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.291-b10

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 981467136 (936.0MB)
   NewSize                  = 20971520 (20.0MB)
   MaxNewSize               = 327155712 (312.0MB)
   OldSize                  = 41943040 (40.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 125829120 (120.0MB)
   used     = 120039720 (114.47879791259766MB)
   free     = 5789400 (5.521202087402344MB)
   95.39899826049805% used
From Space:
   capacity = 6291456 (6.0MB)
   used     = 0 (0.0MB)
   free     = 6291456 (6.0MB)
   0.0% used
To Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
PS Old Generation
   capacity = 36175872 (34.5MB)
   used     = 9333400 (8.901023864746094MB)
   free     = 26842472 (25.598976135253906MB)
   25.800069173177082% used

11384 interned Strings occupying 967408 bytes.

参考文章

https://blog.csdn.net/russle/article/details/99708261

https://www.jb51.net/article/201430.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Dockerfile是一种用于定义Docker镜像的文本文件,它包含了一系列的指令和配置,用于指导Docker在构建镜像时的操作步骤和配置参数。Dockerfile通常包括FROM、RUN、COPY、CMD等指令来定义基础镜像、执行命令、复制文件和设置容器启动时的默认命令等。 Dockerfile中的指令可以按照一定的顺序进行排列,从而实现构建镜像的自动化过程。通过使用Dockerfile,我们可以定义和管理自己的镜像,实现镜像的重复部署和快速扩展。同时,Dockerfile也提供了一种简洁的方式来描述和共享Docker镜像的构建过程。 在使用Dockerfile时,我们可以通过docker build命令来构建镜像。首先,我们需要在Dockerfile所在的目录下执行docker build命令,并指定-Dockerfile参数来指定使用Dockerfile文件。然后,Docker会根据Dockerfile中的指令和配置来构建镜像。 在构建镜像时,往往需要执行一系列的命令来完成一些特定的操作,比如安装软件、配置环境变量等。我们可以使用RUN指令来执行这些命令。而CMD指令则用于在容器启动时执行默认的命令。 总之,Dockerfile是一种用于定义Docker镜像的文本文件,通过其中的指令和配置来实现镜像的构建和配置。它提供了一种简洁和可重复的方式来管理和共享Docker镜像的构建过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker以及dockerfile](https://blog.csdn.net/qq_44942083/article/details/120946861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [07-DockerFile](https://blog.csdn.net/xixihaha_coder/article/details/121888008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值