Arthas排查Kubernetes中应用频繁挂掉重启异常

以下是 Arthas 排查 Kubernetes 中应用频繁挂掉重启异常的完整攻略。

确认场景

首先,需要确认场景。用户反馈应用经常挂掉重启,需要排查问题。该应用运行在 Kubernetes 集群中。需要确定:是所有的节点都有相同的问题,还是只有某个节点有问题。同时,需要定位是否是应用级别的问题。

安装 Arthas

因为需要使用到 Arthas 工具,所以需要先安装 Arthas。可以在 Arthas 官网 找到安装方式。这里介绍一种在 Kubernetes 集群中安装 Arthas 的方式。

在需要排查异常的机器上,创建一个需要被 debug 的容器,并且在启动该容器时打开 Arthas。

下面是一个例子:

apiVersion: v1
kind: Pod
metadata:
  name: debug-container
spec:
  containers:
  - name: debug-container
    image: your/image
    command: ["/bin/sh", "-c", "java -jar /app.jar"]
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: arthas
      mountPath: /arthas
  volumes:
  - name: arthas
    emptyDir: {}

在运行该配置文件启动容器之后,可以通过 kubectl exec 命令进入到 debug-container 容器中,并执行以下命令来启动 Arthas:

# 挂载 arthas.sh
$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar
$ chmod +x arthas-boot.jar

# 启动 Arthas
$ java -jar arthas-boot.jar

确认问题

确认好场景并安装好 Arthas 后,就可以开始排查问题了。

对于容器中的应用,可以使用 Arthas 提供的命令来对应用进行 Debug。下面是一些常用的命令:

jvm

该命令可以查看容器中运行的 JVM 信息,例如版本、启动参数等。

$ jvm

sc

该命令可以查看容器中所有的类,包括类的描述、加载器以及路径等。

$ sc -d com.example.demo.service.UserServiceImpl

jad

该命令可以将一个类反编译成 Java 代码。

$ jad com.example.demo.service.UserServiceImpl

watch

该命令可以对某个类中的方法进行监控,当该方法被调用时可以打印日志。

$ watch com.example.demo.service.UserServiceImpl getUserById

trace

该命令可以对某个方法进行追踪,查看方法的调用过程。

$ trace com.example.demo.service.UserServiceImpl getUserById

示例

以下是两个使用 Arthas 排查 Kubernetes 中应用频繁挂掉重启异常的示例。

示例一:确认场景

我们的场景是:用户反馈应用经常挂掉重启,需要排查问题。该应用运行在 Kubernetes 集群中。需要确定:是所有的节点都有相同的问题,还是只有某个节点有问题。同时,需要定位是否是应用级别的问题。

我们先登录到 Kubernetes 集群所在的机器上,执行以下操作,启动 debug-container 容器:

apiVersion: v1
kind: Pod
metadata:
  name: debug-container
spec:
  containers:
  - name: debug-container
    image: your/image
    command: ["/bin/sh", "-c", "java -jar /app.jar"]
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: arthas
      mountPath: /arthas
  volumes:
  - name: arthas
    emptyDir: {}

然后,我们进入到该容器中,执行以下命令启动 Arthas:

$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar
$ chmod +x arthas-boot.jar
$ java -jar arthas-boot.jar

进入到 Arthas 后,可以使用 jvm 命令查看 JVM 信息,例如版本、启动参数等。对于应用挂掉的问题,最常见的原因就是内存不足,导致 OOM 错误,因为这里是应用级别的问题,所以我们需要确认容器的内存使用情况。我们使用 top 命令可以查看容器的内存、CPU 使用情况。

$ top

如果确认是内存不足导致的异常,我们可以使用 Arthas 的 memory 命令进行内存分析,查看哪些对象占用了大量内存。以下是 memory 命令的使用方法:

$ memory

示例二:排查问题

假设我们已经确认是应用级别的问题导致挂掉,我们需要排查具体是哪个方法/代码导致的问题。

我们先登录到 Kubernetes 集群所在的机器上,执行以下操作,启动 debug-container 容器:

apiVersion: v1
kind: Pod
metadata:
  name: debug-container
spec:
  containers:
  - name: debug-container
    image: your/image
    command: ["/bin/sh", "-c", "java -jar /app.jar"]
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: arthas
      mountPath: /arthas
  volumes:
  - name: arthas
    emptyDir: {}

然后,我们进入到该容器中,执行以下命令启动 Arthas:

$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar
$ chmod +x arthas-boot.jar
$ java -jar arthas-boot.jar

假设我们已经定位到问题所在的类和方法,例如:com.example.demo.service.UserServiceImpl.getUserById(),我们可以使用 watch 命令对该方法进行监控,打印日志帮助我们找出问题。

$ watch com.example.demo.service.UserServiceImpl getUserById

如果我们需要知道当前方法的调用过程,我们可以使用 trace 命令:

$ trace com.example.demo.service.UserServiceImpl getUserById

这样重复进行 1 到 2 即可找到具体问题的根本原因,最终确定具体解决方案。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Arthas排查Kubernetes中应用频繁挂掉重启异常 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 基于SSM+Shiro+Bootstrap实现用户权限管理系统

    下面我将结合示例详细讲解如何使用SSM+Shiro+Bootstrap实现用户权限管理系统的完整攻略。 SSM框架搭建 准备工具和环境: JDK 1.8+ Maven IntelliJ IDEA 或Eclipse Tomcat 创建Maven项目,并添加以下依赖: Spring SpringMVC MyBatis 配置web.xml文件,添加SpringMV…

    Java 2023年6月15日
    00
  • springboot 使用clickhouse实时大数据分析引擎(使用方式)

    下面我来详细讲解一下“SpringBoot使用ClickHouse实时大数据分析引擎的使用方式”。 简介 ClickHouse是俄罗斯的Yandex推出的一款开源分布式列式数据库管理系统,具有高并发、高性能、低延迟等特点,适用于大规模数据高速读写和实时数据分析处理。 Spring Boot是一个基于Spring框架快速搭建Web应用的极简框架,提供了自动化配…

    Java 2023年6月2日
    00
  • PHP生成随机码的思路与方法实例探索

    PHP生成随机码的思路与方法实例探索 前言 在实际开发中,我们常常需要用到随机码,比如生成验证码、生成邀请码等等。PHP提供了多种方法可以生成随机码,本文将对几种常用的方法进行探究和讲解。 常用随机码生成方法 1. rand函数 rand($min, $max) 函数可以用来生成指定范围内的随机整数。 $code = rand(100000, 999999)…

    Java 2023年5月26日
    00
  • 基于Java protected的深入理解

    基于Java protected的深入理解 在Java中,protected是一种访问修饰符,它的作用是控制类的成员变量和成员方法的访问范围。在本文中,我们将探讨protected修饰符的具体用法和相关知识点。 protected修饰符的作用 protected修饰符可以使得一个类的成员变量和成员方法在该类的子类和同一包中的其他类中访问。同时,它也可以保证该…

    Java 2023年5月26日
    00
  • JAVA/JSP学习系列之四(Orion App Server的安装)

    下面是“JAVA/JSP学习系列之四(Orion App Server的安装)”的完整攻略: 介绍 Orion是一个免费的Java应用服务器,它支持J2EE标准,并且提供了许多有用的工具和功能。下面是Orion的一些特点:- 完全兼容J2EE标准;- 支持Servlet、JSP、EJB和JMS;- 提供了一个可用的控制台管理;- 提供了集成的用户身份验证和安…

    Java 2023年6月16日
    00
  • JDBC实现学生管理系统

    下面是 JDBC 实现学生管理系统的完整攻略。 简介 JDBC(Java Database Connectivity) 是 Java 常用的操作关系型数据库的一种机制,它提供了一种标准的 API,用于操作不同数据库系统之间的异同。 学生管理系统是一种简单的信息管理系统,通常基于数据库系统来实现。在这个示例中,我们将展示如何使用 JDBC 来连接数据库并进行基…

    Java 2023年5月20日
    00
  • Spring AOP实现功能权限校验功能的示例代码

    让我来为您介绍一下Spring AOP实现功能权限校验的攻略。 简介 Spring AOP是Spring框架中的一个模块,可以实现面向切面编程(AOP)的功能。通过Spring AOP可以实现功能权限校验的功能,实现对用户的操作进行安全控制并保护业务数据的安全性。 实现步骤 步骤一:定义权限校验的切面 在Spring AOP中,切面是对应用程序中横切关注点的…

    Java 2023年5月20日
    00
  • JSP生成WORD文档,EXCEL文档及PDF文档的方法

    生成Word文档、Excel文档和PDF文档是Web开发常见需求。JSP(Java Server Pages)作为一种动态Web开发技术,可以使用它将动态内容输出到这些文档中。 生成Word文档的方法 使用Apache POI Apache POI是一个用于创建、读取和修改Microsoft Office文档(如Word、Excel和PowerPoint)的…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部