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、业务日志分析

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s实战-基于LivenessProbe健康检查

LivenessProbe探针用于判断容器是否存活,如果探测到容器不健康,则kubelet将杀掉该容器,然后根据重启策略处理。 LivenessProbe的实现方式: ExecAction:在容器内部执行一个命令,如果该命令的返回码为0&…

计算机毕业设计 基于SpringBoot的高校危化试剂仓储管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

最短路径(数据结构实训)(难度系数100)

最短路径 描述: 已知一个城市的交通路线,经常要求从某一点出发到各地方的最短路径。例如有如下交通图: 则从A出发到各点的最短路径分别为: B:0 C:10 D:50 E:30 F:60 输…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多,广告的点击量就越高,进而带来访问数的增加。 2、定义模型 定义一个函数:一次函数 y ax b (a 是斜率、b 是截距) 定义函数: 3、最小二乘法 例子: 用随便确定的参…

BDTC2023:CloudberryDB开源创新与实践

中国大数据技术大会(BDTC)由中国计算机学会(CCF)创立于2008年,已经成为国内外极具行业实践的专业大数据交流平台。12月22日-24日,第十七届中国大数据技术大会(BDTC 2023)在广州举行。…

文字识别技术在未来会有怎样的发展?

随着科技的不断发展,文字识别技术也在不断地改进和完善。未来,文字识别技术将会在更多的领域得到应用,并且将会更加智能化、高效化和个性化。 首先,随着深度学习技术的不断发展,文字识别技术将会更加智能化。目前&…

ubuntu22下安装minconda

bing 搜索 canda install 找到官方网站 https://docs.conda.io/projects/miniconda/en/latest/ 这里我们安装minconda。 官网有安装方法。 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh…

docker的基本管理和相关概念

docker的基本管理和概念 docker:开源的应用容器引擎。基于go语言开发的。运行在linux系统当中的开源的,轻量级的“虚拟机” docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器 docke…

Java 读取超大excel文件

注意&#xff1a;此参考解决方案只是针对xlsx格式的excel文件&#xff01; Maven <dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.2.0</version> </dependency>读取方式1…

Android画布Canvas矩阵Matrix放大裁剪Rect区域的Bitmap,Kotlin

Android画布Canvas矩阵Matrix放大裁剪Rect区域的Bitmap&#xff0c;Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.h…

爬虫基础一(持续更新)

爬虫概念&#xff1a; 通过编写程序&#xff0c;模拟浏览器上网&#xff0c;然后让其去互联网上抓取数据的过程 分类&#xff1a; 1&#xff0c;通用爬虫&#xff1a;抓取一整张页面数据 2&#xff0c;聚焦爬虫&#xff1a;抓取页面中的局部内容 3&#xff0c;增量式爬虫&…

CUMT--Java--线程

目录 一、线程 1、概述 2、Java线程模型 3、主线程 二、创建线程 1、继承Thread类 2、实现Runnable接口 3、使用Callable和Future接口 三、线程生命周期 1、新建和就绪状态 2、运行和阻塞状态 3、死亡状态 四、线程优先级 五、线程同步 1、非同步情况 2、同步…

浅谈WPF之控件模板Control Template和数据模板Data Template

WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计&#xff0c;同时还推出了以模板为核心的新一代设计理念。在WPF中&#xff0c;通过引入模板&#xff0c;将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类&#xff1a;数据模板【Data Template】和控…

创建加密分区或者文件

文章目录 [GParted 中已清除的分区与未格式化的分区](https://superuser.com/questions/706624/cleared-vs-unformatted-partition-in-gparted)创建加密分区解密创建的加密分区以便挂载格式化设备未具体的格式&#xff08;这里为ext4格式&#xff09;创建挂载点目录挂载加密的文…

java在线票务系统(选座)Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet 在线票务系统&#xff08;选座&#xff09;管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean&#xff08;mvc模式)&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第六节 理解垃圾回收GC&#xff0c;提搞程序性能 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基…

泛目录是干什么用的蚂蚁seo泛程序

泛目录是干什么用的蚂蚁seo泛程序目录 泛目录是一种常见的网站优化方法&#xff0c;属于黑帽技术的一种。它的核心原理是利用高权重的网站继承目录&#xff0c;然后快速获得收录与排名。这种方法可以帮助网站在搜索引擎中获得更好的排名&#xff0c;从而吸引更多的流量。 泛目…

右键菜单“以notepad++打开”,在windows文件管理器中

notepad 添加到文件管理器的右键菜单中 找到安装包&#xff0c;重新安装一般即可。 这里有最新版&#xff1a;地址 密码:f0f1 方法 在安装的时候勾选 “Context Menu Entry” 即可 Notepad的右击打开文件功能 默认已勾选 其作用是添加右键快捷键。即&#xff0c;对于任何…

云计算:OpenStack 配置云主机实例的资源实现内网互通

目录 一、实验 1. 环境 2.配置项目及用户 3.配置规格实例与镜像 4.配置VPC 5. 配置安全组 6. 创建云主机 cs_01 &#xff08;cirros系统&#xff09; 7.创建云主机 cs_02 &#xff08;cirros系统&#xff09; 8.创建云主机 cs_03 &#xff08;cirros系统&#xff09; …

小米路由器2(R2D) 安装 MIXBOX

1. 先刷开发版 ROM http://www1.miwifi.com/miwifi_download.html 进入上述网页&#xff0c;找到 R2D 点击下载 开发版 ROM 教程 看 下载按钮上边的 “刷机教程” 刷机教程 2. 开启SSH工具 登录自己的小米账号后&#xff0c;里面会显示出 自己的 root密码&#xff1b; 默认…