docker报错:Unable to get pid of LinuxThreads manager thread及openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题
基于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镜像无法打印线程堆栈和内存堆栈问题相关推荐
- 在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 ...
- 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 ...
- Docker Quickstart Terminal启动报错“Unable to verify the Docker daemon”和步骤“Finalize”出错
Docker Quickstart Terminal启动报错"Unable to verify the Docker daemon"和步骤"Finalize"出 ...
- 解决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 ...
- Ubuntu安装docker报错:Package ‘docker-ce‘ has no installation candidate
Package 'docker-ce' has no installation candidate Ubuntu 20.04.3 安装docker报错 报错一: E: Package 'docker- ...
- 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 ...
- pytorch报错Unable to get repr for
pytorch报错Unable to get repr for 标签出现了-1,2或者其他值,loss计算之后, 报错:CUDA error: device-side assert triggered ...
- centos6.5环境wget报错Unable to establish SSL connection
centos6.5环境wget报错Unable to establish SSL connection [root@centossz008 src]# wget --no-check-certific ...
- eclipse安装SVN插件报错Unable to connect
[help]-> install new sofeware- -> install窗口的work with填写:http://subclipse.tigris.org/update_1.1 ...
最新文章
- 【Structs2】struts2单例多例以及spring整合的问题
- springSide3
- Python 卡方检验、克雷姆值
- 虚拟机安装以及PCL的配置(1)
- CRM Fiori应用 Appointment的close date字段
- TextView实现自动滚动滚动.
- web安全---XSS利用平台BLUE-LOTUS安装与使用
- 十字星文化获数千万元A轮融资,腾讯持续下注
- python解析html的库_python自带的用于解析HTML的库HtmlParser
- linux下rocksdb的编译安装
- linux删除文件后不释放磁盘的问题
- 【C++】(三) MFC入门教程 (VS 2005)
- mac的鼠标滚动方向和触摸板方向,一个插件搞定
- mac下chrome插件安装位置
- lol8月7号服务器维护,LOL8月7日更新了什么内容 8.15新版本更新维护公告
- 【大学时光】回首向来萧瑟处,归去,也无风雨也无晴
- Matlab中的两种除法
- 分享一个properties转YAML小工具
- 1.65亿融资背后,是时候把「百度」标签从林元庆身上摘下了| 人物特写
- 使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI?
热门文章
- Java基础day7
- tensorflow随笔-条件循环语句求解一元多次方程
- AtCoder Beginner Contest 215 G - Colorful Candies 2
- 我的《机器学习》课程的课件合集下载
- 【面试招聘】算法岗通关宝典 | 社招一年经验,字节5轮、阿里7轮
- 【Python基础】为什么更改列表'y'也会更改列表'x'?
- 【NLP】医学AI又一突破,微软开源生物医学NLP基准:BLURB
- 【NLP系列公开课】详解BERT、知识图谱、对话生成、图卷积神经网络
- 从 Java 小白到收获 BAT offer ,分享我这 2 年的经验
- 学会Python正则表达式,就看这20个例子~