• [Docker Java 服务]Docker 容器中Java服务问题排查


    排查工具 - Arthas

    官方介绍

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

    安装

    参考官方文档:https://arthas.aliyun.com/doc/install-detail.html

    我的排查过程

    设置Docker容器权限

    这一步很重要,如果docker容器没有相应的权限,在执行Arthas的一些命令时会报错:
    AsyncProfiler error: No access to perf events. Try --fdtransfer or --all-user option or ‘sysctl kernel.perf_event_paranoid=1’

    设置方法

    这个设置方法有很多,还和你启动容器的方式有关,可以自行百度,我的容器是通过docker-compose.yml进行配置并启动的,配置如下:

    version: "3.7"
    
    services:
      datain-backend:
        image: xxxx:version
        privileged: true
        ports:
          - 8080:8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动容器并获取容器ID

    启动容器
    docker-compose up -d
    
    获取容器ID
    docker ps
    
    进入容器
    docker exec -it 容器ID /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    下载Arthas

    这个Arthas 是个Jar你可以根据官方文档的方法下载,也可以在其它地方下载好上传到宿主服务器,再通过挂载目录的方式将文件弄到docker容器,当然最简单的还是直接下载:
    curl -O https://arthas.aliyun.com/arthas-boot.jar

    启动

    java -jar arthas-boot.jar

    选择对应的Java 服务

    启动后,会给你列出你容器中的java 服务,你可以输入对应的数字来选择

    问题排查

    1. 可以通过生成火焰图来排查
    # 在执行分析的时候最好对相应的接口进行压测一下,或者自己手动多调用一下,因为他是靠统计时间点的访问次数来分析的
    ## 启动打点
    profiler start
    
    ## 过一会儿,停止
    profiler stop
    
    
    ## 停止后会自动生成火焰图到你的容器根目录,是个html,你自己想办法弄到本地来,通过浏览器打开
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ● 火焰图分析:这个我建议可以去网上看看文章,很容易学会的

    从下到上是方法入栈的顺序,你可以找到你要分析的方法,看看他的时间分布,横向的长短代表耗时比例

    1. 监听特定方法执行栈
    # 使用trace命令, 监听com.xxx.server.XXXImpl类 的listTable方法
    trace com.xxx.server.XXXImpl  listTable
    
    • 1
    • 2

    结果分析:每一步都统计的耗时,根据耗时情况进行优化就好了

  • 相关阅读:
    【Prometheus】监控Kubernetes
    JVM学习目录
    乘性散斑噪声理论及其仿真实例分析
    idea注释代码三种方式
    QUIC 与 防火墙
    浅谈安科瑞ADL系列导轨式多功能仪表在迪拜楼宇EMS中的应用
    [论文评析]人体脉搏波速与血压之间关系探索新突破
    qt的xml读写和QDomDocument、QDomElement、QDomNode、QDomNamedNodeMap讲解
    基于飞机配电优化负荷管理系统研究(Matlab代码实现)
    C语言 ——— 学习、使用memcpy函数 并模拟实现
  • 原文地址:https://blog.csdn.net/qq_42380734/article/details/132738197