zoukankan      html  css  js  c++  java
  • Docker 镜像,dump openjdk-alpine 镜像容器中的 jvm

    默认情况下,我们使用的都是 jre 版本的 openjdk,当容器启动卡住不动的时候,看不出来任何问题。

    此时如果能 dump 就能知道线程在干啥,也能找到一些大概的问题。

    此时 jre 版本的镜像就不够用了。

    切换 jre 为 jdk 版本

    只切换为 jdk 还不够,还会遇到 Unable to get pid of LinuxThreads manager thread 的错误。

    创建可以 dump 用的基础镜像

    参考前面文章,创建如下镜像:

    FROM openjdk:8u191-jdk-alpine3.9
    RUN apk add --no-cache tini
    ENTRYPOINT ["tini"]

    修改项目使用的镜像和启动方式

    假设上面创建的镜像名为 openjdk:8u191-jdk-alpine3.9-tini

    FROM openjdk:8u191-jdk-alpine3.9-tini
    COPY app.jar /opt/dubbo-app/app.jar
    WORKDIR /opt/dubbo-app
    EXPOSE 20880
    ENTRYPOINT ["/sbin/tini", "--", "java", "-jar", "app.jar"]

    启动镜像后进入容器

    1. jps 查看 pid
    2. jstack -l pid 查看线程信息

    关于此次 BUG

    经过查看堆栈和代码,发现是 Dubbo 连接 zookeeper 时,用了 CountDownLatch ,由于通过环境变量配置的 ZOOKEEPER 地址中,环境变量名竟然配错了,导致 zookeeper 一直连接不上,因此锁死了主线程。

    实际上这里没有添加 timeout 也是 Dubbo 2.7.1 的一大 BUG。

    dubbo 2.7.1 有很多严重 BUG,而且修复和发布的周期特别的长,一定要慎用。

    主线程堆栈信息:

    "main" #1 prio=5 os_prio=0 tid=0x00005592eb0f1000 nid=0x9 waiting on condition [0x00007fda15afd000]
       java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000000f885dac0> (a java.util.concurrent.CountDownLatch$Sync)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
        at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
        at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration.<init>(ZookeeperDynamicConfiguration.java:64)
        at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory.createDynamicConfiguration(ZookeeperDynamicConfigurationFactory.java:38)
        at org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory.getDynamicConfiguration(AbstractDynamicConfigurationFactory.java:33)
        - locked <0x00000000f885db68> (a org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory)
        at org.apache.dubbo.config.AbstractInterfaceConfig.getDynamicConfiguration(AbstractInterfaceConfig.java:275)
        at org.apache.dubbo.config.AbstractInterfaceConfig.prepareEnvironment(AbstractInterfaceConfig.java:250)
        at org.apache.dubbo.config.AbstractInterfaceConfig.startConfigCenter(AbstractInterfaceConfig.java:240)
        at org.apache.dubbo.config.AbstractInterfaceConfig.lambda$null$7(AbstractInterfaceConfig.java:584)
        at org.apache.dubbo.config.AbstractInterfaceConfig$$Lambda$218/1961945640.get(Unknown Source)
        at java.util.Optional.orElseGet(Optional.java:267)

    对应代码截图如下:

    获取资料

    本次给大家推荐一个免费的学习群,里面概括Java架构/分布式/微服务/docker/高性能高并发以及面试资源等。
    对Java架构感兴趣的程序猿,欢迎加入Q群:790047143,不管你是刚入行得还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
    最后,祝大家早日学有所成。

  • 相关阅读:
    pdfobject (前台展示PDF插件)
    ERROR 19608 --- [ost-startStop-1] c.atomikos.persistence.imp.LogFileLock : ERROR: the specified log seems to be in use already: tmlog in D: ools omcatapache-tomcat-8.5.51in ransaction-logs
    文件上传下载(四) 读 txt 文本 ajaxfileupload
    1129
    centos服务器上部署项目(二) -tomcat
    Guns 打包
    centos服务器上部署项目(一) -jdk,mysql
    layui 学习笔记(四) 复杂表头前台Excel导出
    SpringCloud项目搭建(四) zuul
    sql的基本查询语句
  • 原文地址:https://www.cnblogs.com/ourtest/p/11173038.html
Copyright © 2011-2022 走看看