1.应用背景
1.xx公司线上环境gateway-api网关服务, 由于历史原因和业务网关功能 熔断限流没有做好 (导致业务在一段时间出现502问题,导致业务出现影响)
2.环境基础信息+线上现状
1.应用层面
开发语言: JAVA
应用框架: SpringMvc
2.系统层面
k8s: 1.16.10 版本
2.线上环境调试难度较 主要以下几点
1.运行基础镜像采用openJdk 缺少 jstack 和 jamp 日常诊断java 应用命令.
2.公司安全合规容器内只能使用普通用户,为了降低容器安全风险 也禁止使用linux调试系统命令.(也无法进行安装)
故 (业界主流 阿里云开源的 arthas 专业调试java应用问题神器)
3.Arthas 介绍
更多信息可见: https://arthas.aliyun.com/doc/(官网)
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,
并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,
类加载信息等,大大提升线上问题排查效率.
4.k8s 环境准备 Arthas
4.1 应用程序部署YAML
#1.应用部署yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: java-demo-app
name: java-demo-app
namespace: java-demo
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: java-demo-app
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: java-demo-app
spec:
#hostNetwork: true
containers:
- image: breaklinux/demo-java-app:latest
imagePullPolicy: Always
name: demo-java-app
ports:
- containerPort: 8080
name: tomcat-port
protocol: TCP
- containerPort: 3658
name: arthas-t-port
protocol: TCP
- containerPort: 8563
name: arthas-port
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 60
##服务svc 开放端口
apiVersion: v1
kind: Service
metadata:
name: java-demo-app-svc
namespace: java-demo
spec:
type: NodePort
selector:
app: java-demo-app
ports:
- name: demo-app #应用端口
port: 8080
protocol: TCP
targetPort: 8080
- name: arthas #arthas web控制台端口
port: 3658
protocol: TCP
targetPort: 3658
- name: jvm-port #arthas jvm 调试端口
port: 8563
protocol: TCP
targetPort: 8563