当前位置: 首页 > news >正文

铜陵网站建设软件开发工程师的前景

铜陵网站建设,软件开发工程师的前景,上海市城乡和住房建设厅网站,网站开发 图片库作者#xff1a;卜比 本文是《容器中的 Java》系列文章之 4/n #xff0c;欢迎关注后续连载 #x1f603; 。 系列1#xff1a;JVM 如何获取当前容器的资源限制#xff1f; 系列2#xff1a;Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题 系列3#xff1a;让…作者卜比 本文是《容器中的 Java》系列文章之 4/n 欢迎关注后续连载 。 系列1JVM 如何获取当前容器的资源限制 系列2Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题 系列3让 Java Agent 在 Dragonwell 上更好用 最近在容器环境中发现在 Java 进程是 1 号进程的情况下无法使用 arthas。 提示 AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread。具体操作和报错如下 # java -jar arthas-boot.jar [INFO] arthas-boot version: 3.5.6 [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. * [1]: 1 com.alibabacloud.mse.demo.ZuulApplication 1 [INFO] arthas home: /home/admin/.opt/ArmsAgent/arthas [INFO] Try to attach process 1 [ERROR] Start arthas failed, exception stack trace: com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager threadat sun.tools.attach.LinuxVirtualMachine.init(LinuxVirtualMachine.java:86)at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:78)at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:250)at com.taobao.arthas.core.Arthas.attachAgent(Arthas.java:117)at com.taobao.arthas.core.Arthas.init(Arthas.java:27)at com.taobao.arthas.core.Arthas.main(Arthas.java:166) [INFO] Attach process 1 success.之前也遇到过总是调整了下镜像让 Java 进程不是 1 号进程就可以了。但这个不是长久之计还是要抽时间看下这个问题。 复现问题 我们创建如下项目来复现这个问题 public class Main {public static void main(String args[]) throws Exception {while (true) {System.out.println(hello!);Thread.sleep(30 * 1000);}} }FROM openjdk:8u212-jdk-alpine COPY ./ /app WORKDIR /app/src/main/java/ RUN javac Main.java CMD [java, Main]然后正常启动应用并尝试用 arthas或者 jstack $ # 构建镜像 $ docker build . -t example-attach $ # 启动容器 $ docker run --name example-attach --rm example-attach$ # 在另一个终端进入容器执行jstack $ docker exec -it example-attach sh /app/src/main/java # jstack 1 1: Unable to get pid of LinuxThreads manager thread成功复现问题接下来开始分析。 正常的 attach 流程是什么样子的 如下是在排查问题中梳理出来的 jvm Attach 流程 查找 /tmp/.java_pid${pid} 这个 unix socket如果存在则检查权限然后建立连接。如果不存在则先创建 /proc/pid/cwd/.attachpid{pid}/cwd/.attach_pidpid/cwd/.attachp​id{pid}开始通知 jvm 线程。首先判断是不是 LinuxThread如果是 LinuxThread则找到 LinuxThreadsManager然后给其所有子进程发送 SIGQUIT.如果不是 LinuxThread则直接给目标进程发送 SIGQUIT。目标进程收到信号后创建 Attach Listener监听 /tmp/.java_pid${pid}。开始正常的 socket 通信根据通信的具体内容可以是 dumpThreadjstack也可以是加载 JavaAgent比如上面提到的 arthas。 **Java Attach 机制之 Native 篇 [ 1] **也是一个不错的 attach API 解析。 为什么对1号进程 attach 会报错 首先/tmp/.java_pid${pid} 当时是肯定不存在的如果存在就是直接通信加载 Arthas 了。也可以通过查看文件来确认这一点。 其次.attach_pid${pid} 文件也是能够创建成功的 我们也可以通过 strace 输出来确认 open(“/proc/424/cwd/.attach_pid424”, O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666 unfinished …。 最有可能的原因就是线程判断、发送信号这一步了我们以 jstack 为例查找为什么 attach 会失败。 本来类似上一次的查找过程想着通过调试符号来查但是在 alpine 上的调试符号无法显示源码内容编译环境又很麻烦。所以还是优先用 strace 来查值得注意的是 jstack 的逻辑中有 fork所以记得使用 strace -f jstack 1 来查。 查了下 strace 的输出没有 kill 请求。看来问题是处在线程模型判定的。 刚刚提到 jvm 会判断是不是 LinuxThread那么什么是 LinuxThread 呢首先看下判断的源码 通俗的讲Linux 内核刚开始是不支持“线程”的LinuxThread 机制就是通过 fork 机制共享内存空间的方式来实现线程。但 LinuxThread 在内核看来就是一些独立的父子进程在信号处理、同步原语上有很多缺陷要通过 manager thread 来处理这些逻辑。后来 Red Hat 发起 NPTL内核开始支持线程能力也能够通过更加标准的方式来处理信号、同步等逻辑。 可以用 getconf GNU_LIBPTHREAD_VERSION 来查看是哪种线程模型比如我的机器上输出是 NPTL 2.34。 当然如上面代码所写。可以用 confstr(_CS_GNU_LIBPTHREAD_VERSION,) 来获取当前的线程模型**详情参考手册 [ 2] **。 如果 confstr(_CS_GNU_LIBPTHREAD_VERSION,) 返回 0则表示是 glibc 旧版本认为是 LinuxThread先找到 manager thread通过查找父进程然后给各个子进程发送 SIGQUIT 信号这个过程需要遍历系统内所有进程。如果 confstr(_CS_GNU_LIBPTHREAD_VERSION,) 结果包含 NPTL则认为不是 LinuxThread按照 NPTL 来处理直接发送 SIGQUIT。 但很可惜的是LinuxThread/confstr(_CS_GNU_LIBPTHREAD_VERSION,) 不是 POSIX 标准所以 Alpine 自带的 musl 对这个调用返回 0。 按照上面逻辑jvm 会认为是 LinuxThread尝试找到父进程如果 pid 是 1 的话自然找不到父进程所以报错 Unable to get pid of LinuxThreads manager thread导致文章最开始说的 arthas 无法使用。 关于两种线程模型的详细比较可以参考 **Linux 线程模型比较LinuxThreads 和 NPTL [3 ] **。 为什么非1号进程就能 attach 模拟了下先手动进入 shell这时 sh 就是 1 号进程然后再手动执行 java Mainpid为 8 然后我们看下 getLinuxThreadsManager 是怎么表现的 可以看到在这种情况下jvm 认为 manager thread 是 1 号进程。此时会后执行 sendQuitToChildrenOf(mpid) 即遍历所有的子进程都发送 SIGQUIT这个逻辑其实是有点奇怪的。 **“超凡的主张需要有超凡的证据” [ 4] **。我们重新跑一遍用 strace -f 验证一下。 进程树其中绿色的是线程 jstack 发送的 kill 信号可以看到 jstack 给 1 号进程的所有子进程发送了 SIGQUIT 这个行为和刚刚分析是一致的。不过非常巧合的是大部分进程是忽略了 SIGQUIT 信号的所以在这种情况下jstack 反而是正常工作了的。 怎么解决这个问题 最快捷 workaround 注这种方式不需要调整容器参数不需要重启容器比较推荐。 既然 attach 主要卡在了发送信号上那我们就用 shell 来模拟这个流程 pid1 ;\ touch /proc/${pid}/cwd/.attach_pid${pid} \kill -SIGQUIT ${pid} \sleep 2 ls /proc/${pid}/root/tmp/.java_pid${pid} # 接下来就可以正常 java -jar arthas-boot.jar 挂arthas了通过上面的操作后Attach Listener 已经启动并且监听了路径第二次 attach 就直接可以连接了就可以按照正常的方式使用 arthas 了。 其中有一点需要注意一定需要提前创建 .attach_pid${pid} 文件 不然 jvm 会将这个信号交给默认的 sigaction 处理对于 pid 1 来说会导致容器退出 也有人基于类似原理做了一个 **jattach [ 5] **工具可以直接在 Alpine 中通过 apk add jattach 来安装然后 jattach ${pid} properties也能起到一样的效果。 设置启动参数 注这种方式需要调整启动参数或者环境变量需要重启应用/容器可能会丢失业务现场。 Jvm 支持设置 -XX:StartAttachListener这样就能在启动 Jvm 的时候自动启动 Attach Listener 线程并监听也可以正常使用 arthas。 对于容器环境下更加容易的做法是给容器添加环境变量 JAVA_TOOL_OPTIONS-XX:StartAttachListener这样不用修改启动脚本也能达到效果。 上游优先修改镜像 注这种方式需要修改镜像。 OpenJDK 8 官方没有修复这个问题所以如果直接使用 openjdk:8-jdk-alpine是避免不了这个问题的。**Docker 镜像仓库也有人讨论这个问题 [ 6] **。 OpenJDK 11 就已经解决了这个问题了见**源码 [ 7] **不再对古旧的 LinuxThread 模型做判断这样 arthas 也能工作。 不过 Alpine 官方仓库中的 OpenJDK 8 已经通过自己打 patch 的方式修复了这个问题 https://gitlab.alpinelinux.org/alpine/aports/-/issues/13032 作为比较知名的 JDK 发行版也在 eclipse-temurin:8-jdk-alpine 中修复了这个问题可以直接使用这个镜像。相关讨论见 https://github.com/adoptium/jdk8u/pull/8 总结 在 arthas 的 issue 中或者网上相关的文章中总是重复着 Java 不能作为 1 号进程。很多时候就因为如此我们没有办法挂上诊断工具导致现场丢失故障原因不能及时定位。 作为技术人员还是需要了解底层这样在排查问题、架构设计上才会有更多自由度更能够抓住问题、解决问题。 后续还会出系列文章来解决容器环境下奇奇怪怪的 jvm 问题欢迎关注 相关链接 [1] Java Attach 机制之 Native 篇 https://my.oschina.net/u/3784034/blog/5526214 [2] 详情参考手册 https://man7.org/linux/man-pages/man3/confstr.3.html [3] Linux 线程模型比较LinuxThreads 和 NPTL https://www.jianshu.com/p/6c507b966ad1 [4] 超凡的主张需要有超凡的证据 https://zh.wikipedia.org/zh-hans/%E8%96%A9%E6%A0%B9%E6%A8%99%E6%BA%96 [5] jattach https://github.com/apangin/jattach [6] Docker 镜像仓库也有人讨论这个问题 https://github.com/docker-library/openjdk/issues/76 [7] 源码 https://github.com/openjdk/jdk11u/blob/jdk-11%2B28/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java#L78
文章转载自:
http://www.morning.mbprq.cn.gov.cn.mbprq.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn
http://www.morning.dncgb.cn.gov.cn.dncgb.cn
http://www.morning.xskbr.cn.gov.cn.xskbr.cn
http://www.morning.rqgq.cn.gov.cn.rqgq.cn
http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn
http://www.morning.skbkq.cn.gov.cn.skbkq.cn
http://www.morning.kmldm.cn.gov.cn.kmldm.cn
http://www.morning.plqqp.cn.gov.cn.plqqp.cn
http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn
http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn
http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn
http://www.morning.lqlfj.cn.gov.cn.lqlfj.cn
http://www.morning.jsdntd.com.gov.cn.jsdntd.com
http://www.morning.byshd.cn.gov.cn.byshd.cn
http://www.morning.kwqt.cn.gov.cn.kwqt.cn
http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn
http://www.morning.pyncx.cn.gov.cn.pyncx.cn
http://www.morning.sflnx.cn.gov.cn.sflnx.cn
http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn
http://www.morning.bmtkp.cn.gov.cn.bmtkp.cn
http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn
http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn
http://www.morning.smzr.cn.gov.cn.smzr.cn
http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn
http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn
http://www.morning.qtzk.cn.gov.cn.qtzk.cn
http://www.morning.tsyny.cn.gov.cn.tsyny.cn
http://www.morning.qtwd.cn.gov.cn.qtwd.cn
http://www.morning.rycd.cn.gov.cn.rycd.cn
http://www.morning.sfwd.cn.gov.cn.sfwd.cn
http://www.morning.mmplj.cn.gov.cn.mmplj.cn
http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn
http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn
http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn
http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn
http://www.morning.mpszk.cn.gov.cn.mpszk.cn
http://www.morning.qnyf.cn.gov.cn.qnyf.cn
http://www.morning.kzdgz.cn.gov.cn.kzdgz.cn
http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn
http://www.morning.dbnpz.cn.gov.cn.dbnpz.cn
http://www.morning.jgcxh.cn.gov.cn.jgcxh.cn
http://www.morning.yrms.cn.gov.cn.yrms.cn
http://www.morning.gynlc.cn.gov.cn.gynlc.cn
http://www.morning.pslzp.cn.gov.cn.pslzp.cn
http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn
http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn
http://www.morning.zpqbh.cn.gov.cn.zpqbh.cn
http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn
http://www.morning.ppllj.cn.gov.cn.ppllj.cn
http://www.morning.rbffj.cn.gov.cn.rbffj.cn
http://www.morning.knlyl.cn.gov.cn.knlyl.cn
http://www.morning.xsetx.com.gov.cn.xsetx.com
http://www.morning.grpfj.cn.gov.cn.grpfj.cn
http://www.morning.krywy.cn.gov.cn.krywy.cn
http://www.morning.crqbt.cn.gov.cn.crqbt.cn
http://www.morning.mnqg.cn.gov.cn.mnqg.cn
http://www.morning.ypfw.cn.gov.cn.ypfw.cn
http://www.morning.hkshy.cn.gov.cn.hkshy.cn
http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn
http://www.morning.wklrz.cn.gov.cn.wklrz.cn
http://www.morning.sskhm.cn.gov.cn.sskhm.cn
http://www.morning.hwljx.cn.gov.cn.hwljx.cn
http://www.morning.rwqk.cn.gov.cn.rwqk.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.nwczt.cn.gov.cn.nwczt.cn
http://www.morning.pshpx.cn.gov.cn.pshpx.cn
http://www.morning.rblqk.cn.gov.cn.rblqk.cn
http://www.morning.rhgtc.cn.gov.cn.rhgtc.cn
http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com
http://www.morning.lhytw.cn.gov.cn.lhytw.cn
http://www.morning.rkzb.cn.gov.cn.rkzb.cn
http://www.morning.leyuhh.com.gov.cn.leyuhh.com
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn
http://www.morning.fsjcn.cn.gov.cn.fsjcn.cn
http://www.morning.pxbky.cn.gov.cn.pxbky.cn
http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn
http://www.morning.bpmth.cn.gov.cn.bpmth.cn
http://www.tj-hxxt.cn/news/244306.html

相关文章:

  • 湖南昌正建设有限公司网站自定义域名
  • 网站哪些页面会做静态化百度自媒体怎么注册
  • 站群系统软件学校建设微网站的方案
  • 赫章网站建设宁波哪里有做网站的
  • 建站网络公司wordpress安装如何填数据库
  • 上海定制网站建设wordpress的wp_list_cats
  • 招聘网站建设与开发要求wordpress+采集评论
  • 招聘网官方网站莱芜网站开发
  • 网站备案 收费网站建设的国内外现状
  • 扶余手机网站开发公司让别人做网站需要注意什么问题
  • 设计网站中企动力优陕西省住房与城乡建设厅网站
  • 运城网站建设维护如何网络推广运营
  • 做网站能带来什么北京东城做网站
  • 教育网站建设解决方案网站页脚设计的几个小技巧
  • 二次开发的意义厦门seo优化多少钱
  • 仿皮皮淘网站开发全程培训网推一手单渠道
  • 营销型网站有哪些平台怎么注册自己的品牌
  • 网站软件推荐在线图片转链接生成器
  • 网站优化人员通常会将目标关键词放在网站首页中的网页设计手机版app下载
  • 东莞学校网站建设重生做明星那个网站下载
  • 济南网站建设 齐鲁文化创意基地滨州市滨城区建设局网站
  • 毕业设计网站开发实施步骤国外交互设计网站欣赏
  • 温州建网站成都小程序建设廴成都柚米
  • 网站建设昆山花桥外贸销售管理制度
  • 页面设计报告电子商务seo是什么意思
  • 沭阳做网站shy1z传媒公司网站php源码
  • 网站的交互体验郑州制作网页的公司
  • 门户网站建设情况简介本溪市网站建设
  • 小型公司网站建设论文物流网站建设方案范文
  • 养殖网站模板网站正在建设中html