Docker 镜像,dump openjdk-alpine 镜像容器中的…
2019-08-16 10:15:12来源:博客园 阅读 ()
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"]
启动镜像后进入容器
- jps 查看 pid
- 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,不管你是刚入行得还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成。
原文链接:https://www.cnblogs.com/ourtest/p/11173038.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java各版本新特性总结
下一篇:Spring Cloud 开篇
- 详解SpringBoot(2.3)应用制作Docker镜像(官方方案) 2020-06-08
- 体验SpringBoot(2.3)应用制作Docker镜像(官方方案) 2020-06-07
- Docker Swarm与Kubernetes对比分析如何选择? 2020-06-02
- dockerMesos配置项是怎么解析的?案例详解 2020-06-02
- 什么,容器太多操作不过来?我选择Docker Compose梭哈 2020-05-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash