Java线上问题排查思路

1、Java 服务常见问题

Java 服务的线上问题从系统表象来看大致可分成两大类: 系统环境异常、业务服务异常。

  • 系统环境异常:主要从CPU、内存、磁盘、网络四个方面考虑。比如:CPU 占用率过高、CPU 上下文切换频率次数较高、系统可用内存长期处于较低值、磁盘满了、磁盘 I/O 过于频繁、网络流量异常等等。
  • 业务服务异常:主要是业务服务自身运行出现异常。比如:服务发生内存泄漏导致频繁进行 Full GC、 PV 量过高导致服务崩溃、服务调用耗时异常、线程死锁、多线程并发问题等等。

2、如何定位问题

2.1 Linux 系统的性能分析

(1)CPU 性能分析:使用 top 命令,能够实时显示系统中各个进程的资源占用状况。
在这里插入图片描述
相关参数说明:

PID : 进程id
USER : 进程所有者
PR : 进程优先级
NI : nice值。负值表示高优先级,正值表示低优先级
VIRT : 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
RES : 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
SHR : 共享内存大小,单位 kb
S : 进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪 / 停止;Z=僵尸进程
%CPU : 上次更新到现在的 CPU 时间占用百分比
%MEM : 进程使用的物理内存百分比
TIME+ : 进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND : 进程名称

(2)内存使用情况分析:使用 free命令,来显示的当前内存的使用情况。
在这里插入图片描述
相关参数说明:

total:内存总数
used:已经使用的内存数
free:空闲的内存数
shared:当前已经废弃不用, 总是 0
buff/cache:缓存内存数
available:可用的内存数

(3)磁盘使用情况分析:使用 df 或者 du 命令,查看磁盘使用情况。
在这里插入图片描述
相关参数说明:

Filesystem:文件系统位于哪个分区
1K-blocks:文件系统的总大小,默认以 KB 为单位
Used:用掉的硬盘空间大小
Available:剩余的硬盘空间大小
Use%:硬盘空间使用率
Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置

(4)网络连接状态分析:使用 netstat 命令,查看系统中网络连接状态信息。
常用参数:
-a:显示本机所有连接和监听的端口
-n:不解析域名
-t:显示tcp协议连接
-u:显示udp协议连接
-p:显示连接对应的PID与程序名
在这里插入图片描述
相关参数说明:

Proto:连接协议的种类
Recv-Q:接收到字节数
Send-Q:从本服务器,发出去的字节数
Local Address:本地的IP地址,可以是IP,也可以是主机名
Foreign Address:远程主机的IP 地址
State:网络连接状态
PID/Program name:进程id以及进程名称

网络连接状态各值的含义:

CLOSED(关闭):指网络连接尚未建立,也没有终止。
LISTEN(监听):指服务器在等待客户端发起连接请求。
ESTABLISHED:表示连接已经建立,数据可以通过该连接传输。
CLOSE_WAIT:表示连接已关闭,但是连接方还没有释放资源,需要等待连接方释放资源后才会进入CLOSED状态。
TIME_WAIT:表示连接在建立之后,发送端发送数据包后等待接收端响应的时间。如果接收端没有响应,发送端会进入TIME_WAIT状态,等待一段时间后才会进入CLOSED状态。
DESTROY:表示连接已经被销毁,无法进行任何数据传输。

(5)vmstat:是 Virtual Meomory Statistics(虚拟内存统计)的缩写 , 是实时系统监控工具。
在这里插入图片描述
参数详解:
vmstat 后面第一个参数是采样的时间间隔数单位是秒,第二个参数是采样的次数。

-- procs
r:表示处于运行队列中(正在运行或等待运行)的进程数。
b:表示处于不可中断睡眠状态的进程数。
-- memory
swpd:表示被换出到交换空间的内存大小(单位:KB)。
free:表示空闲内存大小(单位:KB)。
buff:表示用作缓冲区的内存大小(单位:KB)。
cache:表示用作缓存的内存大小(单位:KB)。
-- swap
si:表示每秒从磁盘读入交换区的数据量(单位:KB)。
so:表示每秒写入到磁盘的交换区数据量(单位:KB)。
-- I/O
bi:表示每秒从块设备读入的数据量(单位:块,一般为 512 字节)。
bo:表示每秒向块设备写入的数据量(单位:块,一般为 512 字节)。
-- system
in:表示每秒产生的中断数。
cs:表示每秒上下文切换的次数。
-- CPU
us:表示用户空间占用 CPU 时间的百分比。
sy:表示内核空间占用 CPU 时间的百分比。
id:表示空闲 CPU 时间的百分比。
wa:表示等待 I/O 的 CPU 时间百分比。
st:表示被虚拟机偷走的 CPU 时间的百分比。
2.2 JVM 性能分析

(1)jps:查询当前机器所有 JAVA 进程信息;

jps [ options ] [ hostid ]
options是命令行参数,hostid指特定主机,可以是ip地址、域名, 也可以指定具体协议和端口
options参数说明:
-q:只输出PID。
-m:输出传递给 main 方法的参数。对于嵌入式 JVM,输出可能为空。
-l:输出应用程序主类的完整包名或应用程序 JAR 文件的完整路径名。
-v:输出传递给 JVM 的参数。

(2)jmap:输出某个 java 进程内存情况;

jmap [options] pid
options参数说明:
-heap:查看Java堆的详细信息,包括堆的总大小、已用大小、空闲大小、对象数量等。
-histo:查看Java堆中各个类的实例数量、内存占用大小等信息,可用于查找内存泄漏等问题。
-permstat:查看永久代内存的使用情况。
-F:无法连接Java进程时强制执行,但可能会导致进程暂停。

(3)jstack:打印某个 Java 线程的线程栈信息;

jstack [ options ] pid
options参数说明:
-F:没有响应时,强制打印一个堆栈转储
-l:打印关于锁的其他信息,比如拥有的java.util.concurrent ownable同步器的列表
-m:打印包含Java和本机C/ C++帧的混合模式堆栈跟踪
-h:打印帮助信息

(4)jstat:查看堆内存各部分的使用量,以及加载类的数量;

jstat [option vmid [interval[s|ms] [count]] ]
参数说明:
option:需要监控的数据类型。如:-gc表示监控垃圾收集相关的统计信息;-gccapacity:监控各个区域的大小。
vmid:Java虚拟机的标识符,通常是进程ID。
interval:采样间隔,单位可以是秒(s)或毫秒(ms)。
count:采样次数。

(5)jinfo:用于查看 jvm 的配置参数;

jinfo [option] pid
参数说明:
-flags:显示全部的配置参数
-flag name:输出对应名称的参数
-flag [+|-]name:开启或者关闭对应名称的参数
-sysprops:输出系统属性

3、日志分析

3.1、GC 日志分析

GC 日志是用于定位问题重要的日志信息,在 java 应用的启动参数中增加-XX:+PrintGCDetails可以输出 GC 的详细日志,根据GC日志可以看出jvm垃圾回收的相关信息。无论是 minor GC 或者是 Full GC,我们主要关注 GC 回收的耗时以及频率。

3.2、业务日志分析

可以根据系统出错的大概时间,找到服务器上该时间段的日志,再根据日志去分析具体出错的位置。业务日志除了关注系统异常与业务异常之外,还要关注服务执行耗时情况,耗时过长的服务调用如果没有熔断等机制,很容易导致应用性能下降或服务不可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer模型中的Attention算法

参考【经典精读】万字长文解读Transformer模型和Attention机制 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/104393915图解Transformer_transformer模型训练准确率曲线图-CSDN博客https://blog.csdn.net/qq_41664845/article/details/84969266?appinstall0#commentBoxThe…

命令行终端查看当前目录下子文件和子文件夹数量

文章目录 查看当前目录下有多少子文件:查看当前目录下有多少子文件夹: 查看当前目录下有多少子文件: ls -lA ./ | grep "^-" | wc -l查看当前目录下有多少子文件夹: find ./ -mindepth 1 -type d | wc -l

【人工智能Ⅰ】实验9:BP神经网络

实验9 BP神经网络 一、实验目的 1:掌握BP神经网络的原理。 2:了解BP神经网络的结构,以及前向传播和反向传播的过程。 3:学会利用BP神经网络建立训练模型,并对模型进行评估。即学习如何调用Sklearn中的BP神经网络。…

IIS主机头名的用法--一个IP建多个Web站点

主机头名 我们有时候需要在一个IP地址上建立多个web站点,在IIS中,我们可通过简单的设置达到这个目标。 在IIS中,每个 Web 站点都具有唯一的、由三个部分组成的标识,用来接收和响应请求: (1) IP地址 (2)端口号 (3)主机头名。 …

CGAL的加热法

1、介绍 热方法是一种算法,通过返回三角形网格中所有顶点到给定源顶点集合中最近顶点的测地距离近似值,解决单源或多源最短路径问题。网格中两个顶点的测地距离是指从网格表面(可能经过面的内部)行进的距离。例如,在章…

CodeWhisperer:编码世界中的声音启迪者

人烟 导语: 在数字化时代,编码已经成为了一种不可或缺的技能。而 CodeWhisperer(编码世界中的声音启迪者)则以其卓越的技术和深厚的知识为人们带来了独特的启发和指导。本文将介绍 CodeWhisperer 的背景和成就,探讨他是…

Centos7:Jenkins+gitlab+node项目启动(3)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案 当我们使用sudo su切换权限时提示错误: sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set该错误出现原因:是因为/usr/bin/sudo的权限被…

GrayLog日志平台的基本使用-ssh之Email报警

1、首先编辑并添加邮件配置到server.conf(注意:是添加) vim /etc/graylog/server/server.conf # Email transport transport_email_enabled true transport_email_hostname smtp.qq.com transport_email_port 465 transport_email_use_a…

2023启示录丨自动驾驶这一年

图片|《老人与海》插图 过去的20年,都没有2023年如此动荡。 大模型犹如一颗原子弹投入科技圈,卷起万里尘沙,传统模式瞬间被夷为平地,在耀眼的白光和巨大的轰鸣声之下,大公司、创业者、投资人甚至是每一位观…

修改文件和目录的拥有者

chown 修改文件的用户组固然重要,但是修改文件的拥有者可能会更常用。修改用户组使用的是chgrp命令,而要修改拥有者则应该使用chown命令。 $ ls -l -rw-r--r-- 1 scott scott ... libby_arrowrock.jpg -rw-r--r-- 1 scott family ... libby.jpg -rw-r--…

手把手带你死磕ORBSLAM3源代码(十七)System.cc void System::SaveDebugData类代码分析

目录 一.前言 二.代码 2.1完整代码注释分析 一.前言 这段代码是一个C++函数,其主要功能是将一些与初始化相关的数据保存为文本文件。 二.代码 2.1完整代码注释分析 // 定义一个名为SaveDebugData的函数,它接受一个整型引用参数initIdx。 void System::SaveDebugData…

C语言字符串知识点和算法总结

目录 一、字符串遍历 1、字符串和字符数组 2、获取字符串长度 3、字符串遍历 4、大小写转换 5、字符串数组 二、字符串拷贝 三、字符串比较 四、字符串分割 五、字符串翻转 1、题目详解 2、算法详解 3、源码剖析 六、回文串 1、定义 2、例题讲解 3、算法详解 …

SSM实验室设备管理----计算机毕业设计

项目介绍 本项目为后台管理系统,分为管理员、老师、学生三种角色; 管理员角色包含以下功能: 信息管理:用户管理; 基础管理:实验室管理,实验室申请记录,设备管理,设备记录管理,耗材管理,耗材记录管理等功能…

【腾讯云中间件】2023年热门文章集锦

各位读者,大家好! 光阴似箭,日月如梭,仿佛冬奥会的盛况还在眼前,新的一年却即将到来。在过去的一年里,我们见证了腾讯云中间件在产品升级与创新方面的显著进步,包括消息队列TDMQ品牌全新升级和…

POJ 1651 Multiplication Puzzle

一、题目 1、题目描述 The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product of the number on the card ta…

ClickHouse基础知识(五):ClickHouse的SQL 操作

基本上来说传统关系型数据库(以 MySQL 为例)的 SQL 语句,ClickHouse 基本都支持, 这里不会从头讲解 SQL 语法只介绍 ClickHouse 与标准 SQL(MySQL)不一致的地方。 1. Insert 基本与标准 SQL(My…

windTerm 连接一段时间之后自动断开

默认是关闭会话空闲保活功能的,如所连接的SSH服务没做连接保活, 就很可能超时自动断开 开启会话保活 在 会话 -> 首选项 -> Default Session Settings -> SSH -> 连接 -> 发送空包以保持会话活动 设置15,即15秒自动发空包保…

kafka 有几种数据保留的策略?

kafka 有几种数据保留的策略? 在 Apache Kafka 中,有几种数据保留策略用于定义消息保存的时长和数据保留的规则。这些策略主要影响 Kafka 中的 Topic。 以下是 Kafka 中常见的数据保留策略: 保留时间策略(retention.ms&#xff…

【JAVA核心知识】分布式事务框架Seata

Seata 基本信息 GitHub:https://github.com/seata/seatastars: 20.6k 最新版本: v1.6.1 Dec 22, 2022 官方文档:http://seata.io/zh-cn/index.html 注意 官方仅仅支持同步调用。 官方在FAQ中表示对于异步框架需要自行支持。 具体的扩展思…