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://xiahunao.cn/news/2661176.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券:普通人怎么选个股?

普通人怎么选个股 1、成果 成果是推动个股上涨的内在动力,即成果好的个股能推动个股持续上涨,成果差的个股会导致个股持续跌落,因而,投资者应该选择成果较好的个股。 2、资金 资金是影响股价涨跌的一重要因素,当资…

使用electron属性实现保存图片并获取图片的磁盘路径

在普通的网页开发中,JavaScript由于安全性的考虑,通常是无法直接获取到客户端的磁盘路径的。浏览器出于隐私和安全原因对此类信息进行了限制。 在浏览器环境下,JavaScript主要通过Web APIs来与浏览器进行交互,而这些API通常受到浏…

代码随想录-刷题第四十一天

343. 整数拆分 题目链接:343. 整数拆分 思路:动态规划五步曲 dp[i]:拆分数字i,可以得到的最大乘积为dp[i]。 递推公式:dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 从1遍历j,有两种渠道得到dp[…

媲美保时捷:小米汽车正式亮相| 一周 IT资讯

1、对标保时捷、特斯拉!小米汽车首款产品发布 12月28日,万众瞩目之下,小米汽车首场技术发布会终于揭开神秘面纱,来自全国各地的米粉齐聚北京,共同见证了小米汽车的技术特色及优势。 在本次发布会上,小米汽…

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间,简直火的一塌糊度,学习OpenHarmony相关的技术栈也有一段时间了,做个记账本小应用,将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件(Button、Select、Text、Span、Divider、Image&am…

TikTok真题第8天 | 418.屏幕可显示句子的数量、395.至少有K个重复字符的最长子串、1010.总持续时间可以被60整除的歌曲对

418.屏幕可显示句子的数量 题目链接:418.sentence-screen-fitting 解法: 这道题,看题解都很难看懂,哪怕看出点门道了,也很难用自己的话解释出来。 有几点必须清楚: (1)将字符串…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

计算机网络——应用层与网络安全(六)

前言: 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解,下面让我们对它的最顶层,应用层进行一个简单的学习与认识,由于计算机网络多样的连接形式、不均匀的终端分布,以及网络的开放性和互联性等特征&…

L1-069:胎压监测

题目描述 小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用(示例) 2、视图的同义词使用(示例) 3、函数的同义词使用&am…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据,并将这些数据保存在PC当中。但是随着互联网技术的迅速发展,越来越多的系统集成商利用分布式IO模块,实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

Vue3+ElementPlus: 给点击按钮添加触发提示

一、需求 在Vue3项目中,有一个下载按钮,当鼠标悬浮在按钮上面时,会出现文字提示用户可以点击按钮进行数据的下载技术栈 Vue3 ElementPlusTooltip组件 ElementPlus中的Tooltip组件 ,可用于展示鼠标 hover 时的提示信息 二、实现…

【SD】IP-Adapter 进阶 - 垫图 【1】

目录 关于SD1.5的画风迁移 修改动作-方法一:提示词 修改动作-方法二:openpose 关于SD1.5的画风迁移 1.5测试模型:flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图: 文生图:best quality,masterpiece, co…

GPT-5、开源、更强的ChatGPT!

年终岁尾,正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布,AGI(稍晚一些)、GPT-5、更好的语音模型、更高的费率限制; 更好的GPTs;更好的推理…

weblogic未授权命令执行漏洞(CVE-2020-14882)

漏洞描述: 未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求,利用该漏洞在受影响的 weblogic Server 上执行任意代码。 复现过程: 1.访问ip:port/console 2.poc构造 #!/usr/bin/env python3 # -*- coding: utf-8 -*-…

春款来啦~我先冲了

这款假两件设计的连帽风衣外套 宽松版型对身材包容性很强,韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳,想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节,防风保暖 这件风衣也很好搭配,很经典…

css原子化的框架Tailwindcss的使用教程(原始html和vue项目的安装与配置)

安装教程 中文官网教程 原始的HTML里面使用 新建文件夹npm init -y 初始化项目 安装相关依赖 npm install -D tailwindcss postcss-cli autoprefixer初始化两个文件 npx tailwindcss init -p根目录下新建src/style.css tailwind base; tailwind components; tailwind ut…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢?过程真的是超级简单。 明白了原理以后,把零碎的知识点填充进去就可以了。所以在学习的过程中,不管学什么,我一直都强调的是要循序渐进,和明白原理和逻辑。这篇文章就来介绍一下如何利用…

【数据结构】图论与并查集

一、并查集 1.原理 简单的讲并查集,就是查询两个个元素,是否在一个集合当中,这里的集合用树的形式进行表示。并查集的本质就是森林, 即多棵树。 我们再来简单的举个例子: 假设此时的你是大一新生,刚进入大学,肯定是…