前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S集群容器中集成arthas、netstat即时诊断分析工具

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

作者头像
星哥玩云
发布2022-07-28 14:50:14
3.6K0
发布2022-07-28 14:50:14
举报
文章被收录于专栏:开源部署

背景: k8s 集群中,Java应用容器中添加即时工具分析诊断arthas、netstat

1.预先下载好arthas-packaging-3.1.1-bin.zip文件,在Dockerfile同目录下,并且重命名为arthas.zip wget http://repo1.maven.org/maven2/com/taobao/arthas/arthas-packaging/3.1.1/arthas-packaging-3.1.1-bin.zip

mv arthas-packaging-3.1.1-bin.zip arthas.zip

2.netstat工具在alpine下为ospd-netstat,在Dockerfile直接apk add 添加即可

3.以下为Dokcerfile文件(注:需要openjdk,如果是jre的,会缺少dt.jar,tools.jar arthas工具会使用到;需要安装tini工具,因为默认java 应用跑在容器中会是1 pid号,arthas会无法调用) FROM openjdk:8-jdk-alpine COPY repositories /etc/apk/ RUN apk add --no-cache mesa-gl \ ttf-freefont \ ospd-netstat \ curl \ tini \ jq \ ttf-dejavu \ tzdata && \ mkdir -p /usr/local/arthas && \ rm -rf /var/cache/apk/*

设置环境变量

ENV TZ=Asia/Shanghai

设置时区

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY simhei.ttf /usr/share/fonts/ COPY simkaigb2312.ttf /usr/share/fonts/ COPY simsun.ttc /usr/share/fonts/simsun.ttc COPY arthas.zip /tmp/ ADD ./health.sh / RUN unzip /tmp/arthas.zip -d /usr/local/arthas && \ rm -rf /tmp/arthas.zip

4.镜像打包,并推至私有仓库 docker build -t 192.168.3.10:5001/library/javabase:v8.0.22 . docker push 192.168.3.10:5001/library/javabase:v8.0.22

5.问题总结: 如果未安装tini工具,并且在启动时,预先执行 ENTRYPOINT ["/sbin/tini", "--"] ,在执行 CMD ["sh","-c","java -Xms1500m -Xmx1500M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar /usr/local/factoring_web/xxxx.jar"] 不然会如下报错:

[ERROR] Start arthas failed, exception stack trace: com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread at 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:75) at com.taobao.arthas.core.Arthas.<init>(Arthas.java:28) at com.taobao.arthas.core.Arthas.main(Arthas.java:113) [INFO] Attach process 1 success. [INFO] arthas-client connect 127.0.0.1 3658 Connect to telnet server error: 127.0.0.1 3658 java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.commons.net.SocketClient.connect(SocketClient.java:188) at org.apache.commons.net.SocketClient.connect(SocketClient.java:209) at com.taobao.arthas.client.TelnetConsole.main(TelnetConsole.java:268) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.taobao.arthas.boot.Bootstrap.main(Bootstrap.java:503)

正常执行成功: /usr/local/arthas # java -jar arthas-boot.jar Picked up JAVA_TOOL_OPTIONS: -javaagent:/home/admin/.opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=fqkkah9ke2@1f6f53b91f6e3fd -Darms.appName=test-factoring-web -Darms.agent.env=ACSK8S -Darms.agent.args= 2019-08-06 17:28:47 WARN  JDK version=1.8.0_212 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 2019-08-06 17:28:50 WARN  arms agent start cost: 3755ms [INFO] arthas-boot version: 3.1.1 [INFO] Found existing java process, please choose one and hit RETURN. •[1]: 6 /usr/local/factoring_web/app.jar 1 [INFO] arthas home: /usr/local/arthas [INFO] Try to attach process 6 Picked up JAVA_TOOL_OPTIONS: -javaagent:/home/admin/.opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=fqkkah9ke2@1f6f53b91f6e3fd -Darms.appName=test-factoring-web -Darms.agent.env=ACSK8S -Darms.agent.args= 2019-08-06 17:31:17 WARN  JDK version=1.8.0_212 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 2019-08-06 17:31:20 WARN  arms agent start cost: 3623ms [INFO] Attach process 6 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |.-. | | | || |\ \ | | | | | || | | |.-' | --'--'--' '--'--' --'--'--'--'`-----'

wiki https://alibaba.github.io/arthas tutorials https://alibaba.github.io/arthas/arthas-tutorials version 3.1.1 pid 6 time 2019-08-06 17:31:21

$ exit /usr/local/arthas # netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3658 0.0.0.0: LISTEN 6/java tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 6/java tcp 0 0 127.0.0.1:8563 0.0.0.0:* LISTEN 6/java

6.示例jenkins构建,封装至基础镜像中

cat >./target/Dockerfile <<EOF FROM 192.168.3.10:5001/library/javabase:v8.0.22 RUN \ mkdir -p /usr/local/ocr ADD ./app.jar /usr/local/ocr/ WORKDIR /usr/local EXPOSE 80

ENTRYPOINT ["/sbin/tini", "--"] CMD ["sh","-c","java -Xms3000m -Xmx3000m -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar /usr/local/ocr/app.jar"] EOF

ssh root@192.168.255.1 "/bin/bash /usr/jenkins_home/deploy_history/scf-test/deploy.sh test ocr && \ /usr/bin/kubectl apply -f /usr/jenkins_home/deploy_history/scf-test/test-ocr.yaml && \ exit"

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档