百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

聊聊部署在docker容器里面的springboot项目如何启用arthas

ztj100 2025-02-06 17:13 11 浏览 0 评论

前言

arthas是啥可能大家都知道了,为了凑字数,我把官方的介绍再抄一下

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

今天不详细讲如何使用arthas,因为之前有专门写了一篇博文介绍过,感兴趣的朋友可以查看如下链接

https://mp.weixin.qq.com/s?__biz=MzI1MTY1Njk4NQ==&mid=2247492795&idx=1&sn=4d2d6fc8c692cf9babc2a8e55f4cd331&chksm=e9ed0acdde9a83db5730b765b1e38db03f837c3df7b9b5f51f5fff173f003194ea8e9acffd05&token=1503561694&lang=zh_CN#rd

随着容器化的火热,可能有相当一部分的项目都是基于docker部署,今天主要就聊下运行在docker环境中的springboot项目,如何启用arthas

docker环境中的springboot项目,如何启用arthas

方案一、进入容器内部执行相应命令

 docker exec -it d2ce06ad8855 /bin/bash
 进入容器后,再运行
 curl -O https://arthas.aliyun.com/arthas-boot.jar
 java -jar arthas-boot.jar

这种方案的弊端在于容器销毁后,下次运行容器后,要再次下载arthas-boot.jar

方案二、把arthas安装到基础镜像

FROM openjdk:8-jdk-alpine
VOLUME /tmp
#ENV JAVA_OPTS="-Dcom.sun.management.jmxremote.port=39083 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
ENV JAVA_OPTS=""
COPY localtime /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ONBUILD COPY app.jar app.jar

ARG ARTHAS_VERSION="3.5.0"
ARG MIRROR=false

ENV MAVEN_HOST=https://repo1.maven.org/maven2 \
    ALPINE_HOST=dl-cdn.alpinelinux.org \
    MIRROR_MAVEN_HOST=https://maven.aliyun.com/repository/public \
    MIRROR_ALPINE_HOST=mirrors.aliyun.com 

# if use mirror change to aliyun mirror site
RUN if $MIRROR; then MAVEN_HOST=${MIRROR_MAVEN_HOST} ;ALPINE_HOST=${MIRROR_ALPINE_HOST} ; sed -i "s/dl-cdn.alpinelinux.org/${ALPINE_HOST}/g" /etc/apk/repositories ; fi && \
    # https://github.com/docker-library/openjdk/issues/76
    apk add --no-cache tini && \ 
    # download & install arthas
    wget -qO /tmp/arthas.zip "${MAVEN_HOST}/com/taobao/arthas/arthas-packaging/${ARTHAS_VERSION}/arthas-packaging-${ARTHAS_VERSION}-bin.zip" && \
    mkdir -p /opt/arthas && \
    unzip /tmp/arthas.zip -d /opt/arthas && \
    rm /tmp/arthas.zip

ENTRYPOINT ["/sbin/tini", "--", "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

方案三、使用arthas-spring-boot-starter

1、在项目的pom.xml引入

 
            com.taobao.arthas
            arthas-spring-boot-starter
            ${arthas.version}
        

2、在yml进行配置

这边配置又有两种方式

  • 2.1、配置arthas tunnel server实现远程管理

注: 通过Arthas Tunnel Server/Client 来远程管理/连接多个Agent

因此我们首先要先安装Arthas Tunnel Server/Client

a、 下载部署arthas tunnel server

https://github.com/alibaba/arthas/releases

b、启动arthas-tunnel-server

示例

java -jar  arthas-tunnel-server-3.5.0-fatjar.jar

注: 默认情况下,arthas tunnel server的web端口是8080,arthas agent连接的端口是7777

c、 在项目的yml做如下配置

arthas:
  agent-id: ${ARTHAS_AGENT_ID:hsehdfsfghhwertyfad}
  app-name: ${spring.application.name}
  tunnel-server: ${ARTHAS_TUNNEL_SERVER:ws://localhost:7777/ws}

注: agentId要保持唯一,否则会在tunnel server上冲突,不能正常工作

d、 效果演示

  • 2.2、直接在项目的yml做如下配置
arthas:
 # 通过http访问的端口
  http-port: 8563
  # 通过telnet访问的端口
  telnet-port: 3658
  session-timeout: 1800
  # 绑定的ip
  ip: 0.0.0.0

注: 如果配置 arthas.telnetPort为 -1 ,则不监听 telnet端口。如果配置 arthas.telnetPort为 0 ,则随机telnet端口。arthas.httpPort类似

效果演示

  • a、通过http访问
  • b、通过telnet访问

arthas入门使用

核心思想通过help命令,先通过help了解一下arthas有啥命令


然后过help 你感兴趣的命令,比如你对thread这个命令很感兴趣,则在命令行输入

help thread


示例演示,比如排查项目中是否存在死锁

thread -b


我们也比较常用dashboard命令来查看cpu、gc等信息

dashboard

总结

arthas确实降低我们排查java问题的难度,但arthas的命令那么多,很多时候我们都记不住,就算能记,我也不会去记,我正常使用的套路是先help 命令,然后找到相应的示例,最后照猫画虎。

如果使用http或者telnet的话,基于安全考量,那个ip最好是使用内网ip,不要像我示例直接0.0.0.0,我是为了演示方便。

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-arthas

相关推荐

利用navicat将postgresql转为mysql

导航"拿来主义"吃得亏自己动手,丰衣足食...

Navicat的详细教程「偷偷收藏」(navicatlite)

Navicat是一套快速、可靠并价格适宜的数据库管理工具,适用于三种平台:Windows、macOS及Linux。可以用来对本机或远程的MySQL、SQLServer、SQLite、...

Linux系统安装SQL Server数据库(linux安装数据库命令)

一、官方说明...

Navicat推出免费数据库管理软件Premium Lite

IT之家6月26日消息,Navicat推出一款免费的数据库管理开发工具——NavicatPremiumLite,针对入门级用户,支持基础的数据库管理和协同合作功能。▲Navicat...

Docker安装部署Oracle/Sql Server

一、Docker安装Oracle12cOracle简介...

Docker安装MS SQL Server并使用Navicat远程连接

...

Web性能的计算方式与优化方案(二)

通过前面《...

网络入侵检测系统之Suricata(十四)——匹配流程

其实规则的匹配流程和加载流程是强相关的,你如何组织规则那么就会采用该种数据结构去匹配,例如你用radixtree组织海量ip规则,那么匹配的时候也是采用bittest确定前缀节点,然后逐一左右子树...

使用deepseek写一个图片转换代码(deepnode处理图片)

写一个photoshop代码,要求:可以将文件夹里面的图片都处理成CMYK模式。软件版本:photoshop2022,然后生成的代码如下://Photoshop2022CMYK批量转换专业版脚...

AI助力AUTOCAD,生成LSP插件(ai里面cad插件怎么使用)

以下是用AI生成的,用AUTOLISP语言编写的cad插件,分享给大家:一、将单线偏移为双线;;;;;;;;;;;;;;;;;;;;;;单线变双线...

Core Audio音频基础概述(core 音乐)

1、CoreAudioCoreAudio提供了数字音频服务为iOS与OSX,它提供了一系列框架去处理音频....

BlazorUI 组件库——反馈与弹层 (1)

组件是前端的基础。组件库也是前端框架的核心中的重点。组件库中有一个重要的板块:反馈与弹层!反馈与弹层在组件形态上,与Button、Input类等嵌入界面的组件有所不同,通常以层的形式出现。本篇文章...

怎样创建一个Xcode插件(xcode如何新建一个main.c)

译者:@yohunl译者注:原文使用的是xcode6.3.2,我翻译的时候,使用的是xcode7.2.1,经过验证,本部分中说的依然是有效的.在文中你可以学习到一系列的技能,非常值得一看.这些技能不单...

让SSL/TLS协议流行起来:深度解读SSL/TLS实现1

一前言SSL/TLS协议是网络安全通信的重要基石,本系列将简单介绍SSL/TLS协议,主要关注SSL/TLS协议的安全性,特别是SSL规范的正确实现。本系列的文章大体分为3个部分:SSL/TLS协...

社交软件开发6-客户端开发-ios端开发验证登陆部分

欢迎订阅我的头条号:一点热上一节说到,Android客户端的开发,主要是编写了,如何使用Androidstudio如何创建一个Android项目,已经使用gradle来加载第三方库,并且使用了异步...

取消回复欢迎 发表评论: