[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

启动容器并获取容器ID

启动容器
docker-compose up -d

获取容器ID
docker ps

进入容器
docker exec -it 容器ID /bin/bash

下载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. 监听特定方法执行栈
# 使用trace命令, 监听com.xxx.server.XXXImpl类 的listTable方法
trace com.xxx.server.XXXImpl  listTable

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

你可能感兴趣的:(后端框架,问题排查,docker,docker,java,容器)