基于openjdk:8u171-alpine构建的java镜像,使用jstack命令打印线程的时候会提示以下错误:

/opt # ps -ef
PID USER TIME COMMAND
1 root 0:28 /usr/lib/jvm/java-1.8-openjdk/bin/java -jar /test/lib/test.jar
66 root 0:00 /bin/sh
70 root 0:00 ps/opt # jstack 1
1: Unable to get pid of LinuxThreads manager thread

使用jmap命令尝试了一下,也是一样的错误。
换了一种启动方式,使用/bin/sh启动docker,然后进入docker手动启动java进程,然后再用jstack命令,就能正常打印。
换了一个centos镜像,手动安装openjdk,在启动docker的时候直接启动java进程,然后进入docker,使用jstack命令,也可以正常打印。

通过这几种尝试,得出的结论是:
使用centos+java镜像,可以正常打印线程堆栈,但是这种方式的缺陷就是镜像太大,大约600M左右;
使用alpine+java镜像,以/bin/sh方式启动docker,然后手动启动java进程,这时java进程的PID不为1,这种方式能够正常打印线程堆栈。这种方式缺点就是java进程如果异常退出了,docker不会检测到,所以无法做自动重启等操作;
使用alpine+java镜像,如果是以直接运行java进程的方式启动docker,也就是说java进程的PID为1,这种方式无法正常打印线程堆栈。

查看了一下github上openjdk官方的问题答复,确实是存在这种情况,并且openjdk的维护成员看上去也无法解决这个问题。
但是有一个曲线解决方法,就是在启动docker的时候先运行一个tini进程,然后通过tini进程去运行java进程。
这种方式java进程的PID不为1,能够打印堆栈,同时如果java进程退出,tini也能检测到,并通知到docker,docker来做相关的处理,完美的解决了这个问题。

参考Dockerfile如下:

FROM openjdk:8u171-alpine
RUN apk add tini
ENTRYPOINT ["tini"]

这里的RUN命令指定在制作镜像的时候通过apk管理工具安装了tini程序。ENTRYPOINT命令指定在运行docker的时候要运行tini程序,具体的java程序作为参数传给tini。
我们有多个java微服务,所以不能把tini装在每个java微服务镜像中,而是装在我们自己的基础镜像中。

具体服务的Dockerfile如下:

FROM java
ADD build/bootScripts /test/bin
ADD build/libs /test/lib
WORKDIR /test
EXPOSE 8080
CMD /test/bin/test

这里的/test/bin/test就是传给tini的实际要执行的启动命令。

参考资料:
https://github.com/docker-library/openjdk/issues/76
https://github.com/krallin/tini/issues/8

https://www.cnblogs.com/lasdaybg/p/10218485.html

报错:jstack on alpine:Unable to get pid of LinuxThreads manager thread

解决方法:尝试把你的dockerfile 中启动java的方式改为以下方法:

ENTRYPOINT ["/bin/bash", "-c", "set -e && java -Xmx100m -jar /demo.jar"]

k8s 集群容器中集成arthas、netstat即时诊断分析工具

docker报错:Unable to get pid of LinuxThreads manager thread及openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题相关推荐

  1. 在docker中启动服务报错:New main PID 558 does not belong to service

    在docker中启动服务报错: New main PID 558 does not belong to service, and PID file is not owned by root. Refu ...

  2. docker报错:System has not been booted with systemd as init system (PID 1). Can‘t operate.

    docker使用centos7命令 systemctl 报错 $ systemctl status firewalld System has not been booted with systemd ...

  3. Docker Quickstart Terminal启动报错“Unable to verify the Docker daemon”和步骤“Finalize”出错

    Docker Quickstart Terminal启动报错"Unable to verify the Docker daemon"和步骤"Finalize"出 ...

  4. 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketExceptionsocket closed

    转载自  解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketException"socket ...

  5. Ubuntu安装docker报错:Package ‘docker-ce‘ has no installation candidate

    Package 'docker-ce' has no installation candidate Ubuntu 20.04.3 安装docker报错 报错一: E: Package 'docker- ...

  6. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  7. pytorch报错Unable to get repr for

    pytorch报错Unable to get repr for 标签出现了-1,2或者其他值,loss计算之后, 报错:CUDA error: device-side assert triggered ...

  8. centos6.5环境wget报错Unable to establish SSL connection

    centos6.5环境wget报错Unable to establish SSL connection [root@centossz008 src]# wget --no-check-certific ...

  9. eclipse安装SVN插件报错Unable to connect

    [help]-> install new sofeware- -> install窗口的work with填写:http://subclipse.tigris.org/update_1.1 ...

最新文章

  1. 【Structs2】struts2单例多例以及spring整合的问题
  2. springSide3
  3. Python 卡方检验、克雷姆值
  4. 虚拟机安装以及PCL的配置(1)
  5. CRM Fiori应用 Appointment的close date字段
  6. TextView实现自动滚动滚动.
  7. web安全---XSS利用平台BLUE-LOTUS安装与使用
  8. 十字星文化获数千万元A轮融资,腾讯持续下注
  9. python解析html的库_python自带的用于解析HTML的库HtmlParser
  10. linux下rocksdb的编译安装
  11. linux删除文件后不释放磁盘的问题
  12. 【C++】(三) MFC入门教程 (VS 2005)
  13. mac的鼠标滚动方向和触摸板方向,一个插件搞定
  14. mac下chrome插件安装位置
  15. lol8月7号服务器维护,LOL8月7日更新了什么内容 8.15新版本更新维护公告
  16. 【大学时光】回首向来萧瑟处,归去,也无风雨也无晴
  17. Matlab中的两种除法
  18. 分享一个properties转YAML小工具
  19. 1.65亿融资背后,是时候把「百度」标签从林元庆身上摘下了| 人物特写
  20. 使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI?

热门文章

  1. Java基础day7
  2. tensorflow随笔-条件循环语句求解一元多次方程
  3. AtCoder Beginner Contest 215 G - Colorful Candies 2
  4. 我的《机器学习》课程的课件合集下载
  5. 【面试招聘】算法岗通关宝典 | 社招一年经验,字节5轮、阿里7轮
  6. 【Python基础】为什么更改列表'y'也会更改列表'x'?
  7. 【NLP】医学AI又一突破,微软开源生物医学NLP基准:BLURB
  8. 【NLP系列公开课】详解BERT、知识图谱、对话生成、图卷积神经网络
  9. 从 Java 小白到收获 BAT offer ,分享我这 2 年的经验
  10. 学会Python正则表达式,就看这20个例子~